Учитывая ist функцию Haskell:
head . filter fst
Вопрос в том, как вручную найти "вручную". Если я позволю Haskell сказать мне тип, который я получаю:
head . filter fst :: [(Bool, b)] -> (Bool, b)
Но я хочу понять, как это работает, используя только сигнатуры используемых функций, которые определены следующим образом:
head :: [a] -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
filter :: (a -> Bool) -> [a] -> [a]
fst :: (a, b) -> a
Изменить: очень много очень хороших объяснений... нелегко выбрать лучший!