みどりねこ日記

よくわからないけど、頑張りますよ。

Haskellのモナド(5)

Haskellでは、型クラスであるモナドモナドを表すものとして使われています。モナドはControl.MonadモジュールとPreludeの中で定義されています。

class Monad m where
	return :: a -> m a
	(>>=) :: m a -> (a -> m b) -> m b
	(>>) :: m a -> m b -> m b
	fail :: String -> m a

return と bind演算子とは別に、(>>)とfailという2つの補助的な関数が定義されています。>>演算子は「それから」とか「そのあと」などと読み、

m >> n = m >>= ¥_ -> n

のように定義されていることが多いです。これは連続したモナディックアクションを実行したいが、最初のアクションの値を次のアクションに渡す必要がないときに使われます(IOモナドなどでよく使われます)。

printSomethingTwice :: String -> IO ()
printSomethingTwice str = putStrLn str >> putStrLn str

fail関数はdo記法において、パターンマッチに失敗した時に対処するための関数です。技術的な問題で作られた関数で、モナドとは関係がありません。自分のコード内で用いることは推奨されていません。