由于以下做块:
do
x <- foo
y <- bar
return x + y
脱糖为以下形式:
foo >>= (\x -> bar >>= (\y -> return x + y))
这里不是\x -> ...
而且y -> ...
实际上是延续吗?
我想知道是否有一种方法可以捕获 定义中的延续bind
,但我无法获得正确的类型。IE:
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
单子,我只是在试验和尝试一些东西。