次のdoブロックなので:
do
x <- foo
y <- bar
return x + y
次の形式に脱糖されます:
foo >>= (\x -> bar >>= (\y -> return x + y))
ここに継続は\x -> ...
ありませんか?y -> ...
の定義で継続をキャプチャする方法があるかどうか疑問に思いましたがbind
、タイプを正しく取得できません。すなわち:
data Pause a = Pause a | Stop
instance Monad Pause where
return x = Stop
m >>= k = Pause k -- this doesn't work of course
今、私はタイプをいじってみました:
data Pause a = Pause a (a -> Pause ???) | Stop
------- k ------
しかし、これも機能しません。これらの暗黙の継続をキャプチャする方法はありませんか?
ところで、私はモナドについて知っていますCont
、私はただ実験して物事を試しています。