[Haskell] (>>=)はSコンビネータで、Preludeに入っているので良いのでは(?)

実は(常識?)

instance Monad ((->) r) where  
    return = const
    f >>= k = \ r -> k (f r) r    

なので

f x = hoge (fuga x) x  

f = hoge =<< fuga  

になる。

よく(<*>)を使う気がするが、>>=はPreludeに入っているので良いのではと思った。


詰まった時に、ポイントフリーに直してくれるツール http://pointfree.io/
を使ってみたところ変換されて「へぇ!」と思った。


(>>=) :: forall a b. m a -> (a -> m b) -> m b
(=<<) :: Monad m => (a -> m b) -> m a -> m b