Я новичок в Haskell, пытающийся обернуть голову вокруг привязки типов в функциях и о том, как Haskell применяет ее. Например, даже если для функции fst
указан тип fst :: (a, b) -> a
, компилятор не жалуется на функцию fst'
. Но компилятор жалуется на привязки типов для функции elem'
.
fst' :: (a,a) -> a
fst' s = fst s
elem' :: (Eq a, Eq b) => a -> [b] -> Bool
elem' x xs = elem x xs