Я считаю, что я понимаю fmap . fmap
для Фунтеров, но по функциям у меня болит голова уже несколько месяцев.
Я видел, что вы можете просто применить определение (.)
к (.) . (.)
, но я забыл, как это сделать.
Когда я сам это пробовал, это всегда получается неправильно:
(.) f g = \x -> f (g x)
(.) (.) (.) = \x -> (.) ((.) x)
\x f -> (.) ((.) x) f
\x f y -> (((.)(f y)) x)
\x f y g-> (((.)(f y) g) x)
\x f y g-> ((f (g y)) x)
\x f y g-> ((f (g y)) x):: t2 -> (t1 -> t2 -> t) -> t3 -> (t3 -> t1) -> t
Если "просто применить определение" - единственный способ сделать это, как кто-нибудь придумал (.) . (.)
?
Должно быть какое-то более глубокое понимание или интуиция, которую мне не хватает.