モナドの合成
>「
>モナドのすべて
>」を読んだら書いてあったので、文言はわかっていたのだけどイマイチ使いどころがよくわからないもののひとつが合成というやつで、これを軽々と使いこなせるとカッコいいのだろうなぁと朧げに思っていたのだけど。
>
>ちょっとサンプル例題を思いついたのでメモ。
>
>1行ずつ入力してもらって、入力が quit だったら、それまでの入力したものをリストにする処理を考える。
>
>これはこう書ける。
>
>import Control.Monad.List
inputList :: ListT IO String
inputList =
do s <- liftIO $ getLine
guard ("quit" /= s)
return s `mplus` inputList > >なるほどなるほど。 >
inputList =
do s <- getLine
if s == "quit"
then return []
else inputList >>= return . (s:) > >んーあんまりコード量は変わらなかった。処理が複雑化したら変わるかなあ(大差ない気もする)。 >
inputList :: ListT IO String
inputList =
do s <- liftIO $ getLine
guard ("quit" /= s)
return s `mplus` inputList > >なるほどなるほど。 >
inputList =
do s <- getLine
if s == "quit"
then return []
else inputList >>= return . (s:) > >んーあんまりコード量は変わらなかった。処理が複雑化したら変わるかなあ(大差ない気もする)。 >
