У функции fmap есть оператор <$> - он вместе с применением функции поднимает ее в некоторый целевой контейнер.
Prelude> (*2) <$> [1,2,3]
[2,4,6]
Этот оператор имеет левую ассоциативность и 4 приоритет:
Prelude> :i <$>
(<$>) :: Functor f => (a -> b) -> f a -> f b
-- Defined in ‘Data.Functor’
infixl 4 <$>
Левая ассоциативность нужна чтобы организовывать цепочки применения этого оператора:
Prelude> (*2) <$> [1,2,3]
[2,4,6]
Prelude> (+5) <$> (*2) <$> [1,2,3]
[7,9,11]
В модуле Data.Functor определен еще один оператор <$ - он имеет вспомогательное значение:
Prelude> :i <$
class Functor (f :: * -> *) where
...
(<$) :: a -> f b -> f a
-- Defined in ‘GHC.Base’
infixl 4 <$
Этот оператор затирает значение хранящееся в контейнере некоторым единственным значением a:
Prelude> (30) <$ [1,2,3]
[30,30,30]
Главное требование к представителю класса Functor заключается в том, что структура контейнера не должна меняться.