[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
323(1): 2020/05/23(土)00:35 ID:PUmkxvlF(1/3) AAS
次のように、一つのモナドを遅延的に無限に評価できる関数 repM は定義できるでしょうか?
repM :: (Monad) => m a -> m [a]
xs <- repM (return 1)
print $ take 3 xs -- [1, 1, 1]
ys <- take 2 <$> repM (return 1)
print ys -- [1, 1]
326: 2020/05/23(土)01:56 ID:PUmkxvlF(2/3) AAS
>>324
>>325
それはひとつのモナドを3回評価しているのではなく、
ひとつのモナドの中の値を3回評価しているのではないでしょうか?
例えば repM (getLine >>= print) を評価すると、
1回しか getLine >>= print を評価しません。
ちなみに、IOモナドに限れば unsafeInterleaveIO 関数が使えます。
また、リストではなくいわゆるストリームなら出来ました。
ですが今はモナド全般に適用でき、リストのモナドを返す関数を求めています。
327: 2020/05/23(土)02:01 ID:PUmkxvlF(3/3) AAS
>>324
すいません。
補足です。
a <- take 3 <$> repM (getLine >>= print) を評価すれば、
3回の副作用 getLine >>= print が実行され、
a は [(), (), ()] を束縛していて欲しいのです。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.050s