関数型プログラミング言語Haskell Part11
■ このスレッドは過去ログ倉庫に格納されています
0355デフォルトの名無しさん
2009/12/22(火) 00:14:30繰り返して実行することで、ある型の値を次々と取り出せるモノのことをジェネレータと呼びたい
>>351でいうg1やg2のこと。具体的に定義するなら
type Generator a = IO a
問題は、ある型Tのリスト[T]が与えられたとき、これに対応するジェネレータGenerator Tを得たい、というもの
この変換を直接行う関数[a] -> Generator aはうまく定義できず、
IOアクションを返す関数[a] -> IO (Generator a)を書くしかない、というのが>>351の主張
>>352
>「普通の関数が、呼ばれるたびに別のものを返す」可能性を否定できないの?
Haskellの関数は、同じ引数で呼ばれたら同じものを返すと決まってる。参照透明性ってやつ
[a] -> IO aという型を持つ関数は、同じ[a]を与えられたらいつも同じIO aを返さないといけない
(一方、IO aを実行するとa型の値が結果として得られるけど、この結果は毎回異なる可能性がある)
■ このスレッドは過去ログ倉庫に格納されています