Я пытаюсь понять, как работает композиция функций.
Типичный пример:
(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = \x -> f (g x)
Легко понять, что такое композиция функций.
Теперь рассмотрим:
(fmap . fmap) (+5) (Just (Just 4))
Рассмотрим первую fmap
реализацию:
fmap . fmap = \x -> fmap ( fmap x )
Как будет выполняться пример?
Будет ли fmap (+5)
выполняться первым?
Каково значение x
в связи с примером?