<$>が何かよくわからなかったので調べました。
<$>はfmapの中置演算子版です。
fmap :: Functor f => (a -> b) -> f a -> f b
(<$>) :: Functor f => (a -> b) -> f a -> f b
だから、fmapと(<$>)は全く同義です。
例
>> let add3 = (+) 3
>> mx = Just 4
>> add3 <$> mx
Just 7
公式ドキュメントによると、<$>はファンクターを介して$を持ち上げ(lift)た関数適用演算子です。以下のようなに見比べると、確かにそんな気がしてきます。
-- $は右側のJust 10に対してshowを適用する
>> show $ Just 10
"Just 10"
-- <$>は右側のJust 10の中の10に対してshowを適用する
>> show <$> Just 10
Just "10"
トリッキーな使い方(私はそう思ってしまいましたがわかっている人からすると当たり前なのかもしれません)はEitherに対して使う場合です。
>> show <$> Left 10
Left 10
>> show <$> Right 10
Right "10"
ここでは、Either Int Intというデータに対して適用しているので、<$>を使う場合、Rightの中の値にしか適用されません。こういう使い方は一般的なのでしょうか。コードがわかりにくくなるだけのような気がします。
説明を読んだり例を見るとなんとなくわかった気がしてきますが、いまいちピンときてません。使いながら慣れていこうと思います。