関数型プログラミング言語Haskell Part5
■ このスレッドは過去ログ倉庫に格納されています
0781デフォルトの名無しさん
2006/10/08(日) 21:46:52展開がおかしい。
まず、mySequenceの定義から
mySequence (putChar 'c':[])
= putChar 'c' >>= (\h -> mySequence [] >>= (\t -> return (h:t)))
= putChar 'c' >>= (\h -> return [] >>= (\t -> return (h:t)))
ここで、モナド則から
return [] >>= (\t -> return (h:t))
= return (h:[])
よって、
mySequence (putChar 'c':[])
= putChar 'c' >>= (\h -> return (h:[]))
ちなみに、putChar 'c' の型は IO () なので、hに代入されるのは'c'ではなく () 。
なので、mySequence [putChar 'a', 略] >>= print とすると、
abc[(),(),()]と表示される。
■ このスレッドは過去ログ倉庫に格納されています