私は最近、loeb
とmoeb
の機能hereを見つけました。私はそれができることを探そうとしています。moeb traverse non-termination
私は一部の「セル」でIO
を実行する可能性があるスプレッドシートのような動作を実現しようとしています。私はmoeb traverse
がこれを行う良い候補のように思えていたが、私が使用したリストのなかでは(つまり、const $ return something
以外の)機能は永遠に実行するために全呼び出しを引き起こした。
([7,12,3],moeb.hs: out of memory
このエラーが発生する理由:この後、私はState
モナドでそれをテストしてみました:これは
moeb f x = fix $ \g -> f ($g) x
foo v = do
x <- get
vs <- v
put (x + 3)
return (x + (vs!!0))
test = [
const $ return 7,
foo,
fmap length
]
main = print $ runState (moeb traverse test) 5
結果でしたか? foo
は状態を取得して設定しますが、最終状態の評価がハングする間は正常に評価されます。 そして、どのようにして終了するスプレッドシートとIOの動作を達成できますか?
なぜそれがハングするのか分かりますが、 'mfix'を使って' moeb'を一般化するとどういう意味ですか? – Ryba
単純なものは 'moebM f x = mfix $ \ g - > f($ g)x'です。最初の引数として 'traverse'を使いますが、' test'は別の型に変更する必要があります。 –
これはうまくいきました、ありがとう – Ryba