Real World Haskellでは、コンビネータを次のように説明しています。
Haskell では、他の関数を引数として取り、新しい関数をコンビネータとして返す関数を参照します。
そして後で、maybeIO
関数はコンビネータであり、その型シグネチャは次のようになると述べています。
maybeIO :: IO a -> IO (Maybe a)
しかし、私が見ることができるのは、それmaybeIO
が IO モナドでラップされた値を取り、IO モナドで値を返す関数であるということだけです。では、この関数はどのようにしてコンビネータになるのでしょうか?