関数型プログラミング言語Haskell Part8at TECH関数型プログラミング言語Haskell Part8 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト50:デフォルトの名無しさん 07/11/06 23:09:33 letのところは無視してdo構文の各行を最終的な型だけで見てやったら それぞれこんな感じになって、 1. do {r <- IO r; IO ()} 2. do {r <- IO r; String} 3. do {r <- IO r; [Int]} これを >>= を使った形にしたらこんな感じ。 1. IO r >>= (r -> IO ()) 2. IO r >>= (r -> String) 3. IO r >>= (r -> [Int]) (>>=) :: m a -> (a -> m b) -> m bだから >>=の前後は m a >>= (a -> m b) って状態になってないといけない。 1はちゃんとそれを満たしてるからOKだけど、 2はString = [Char] = [] Charで、IO ≠ []なのでNG。 3も同様にNG。 51:デフォルトの名無しさん 07/11/06 23:39:33 >>49 読んだ 少し分かったような分からないような…? YOUはIOモナドを使った関数も参照透明だよって言ってるけど 標準入力読んだときとか乱数生成したときとか同じ引数あげても同じ値が返ってくるとは 限らないじゃん それって困るんじゃないの? って思うの >>50 >>49の説明と合わせたらちょっと分かったかも そーいえばリストもモナドなんだったっけ 例示してくれた1.2.3.の例はHaskellとして正しい文法なん? 言いたい意味はわかるけどそういう書き方があるの? 前スレ952が教えてくれたサイトやら見てみたけどわかんない… 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch