状态单子“接口”
class MonadState s m where
get :: m s
put :: s -> m ()(+ return and bind)允许在不使用State构造函数的情况下使用State monad构造任何可能的计算。例如,State $ \s -> (s+1, s-1)可以编写为
do s <- get
put (s-1)
return (s+1)类似地,我永远不需要使用Reader构造函数,因为我可以使用ask、return和(>>=)创建计算。准确地说:Reader f == ask >>= return . f。
对于continuations也是如此吗?是否有可能使用callCC (MonadCont中唯一的函数)编写Cont r a的所有实例,返回并绑定,并且永远不会输入类似Cont (\c -> ...)的内容
发布于 2010-04-18 06:23:21
我不这样认为。看看这些类型:
Cont :: ((a -> r) -> r) -> Cont r a
callCC :: ((a -> Cont r b) -> Cont r a) -> Cont r a如果您只有callCC,那么在任何地方都不能使用r作为类型-它可以是任何类型。所以我不知道你如何翻译一些使用它作为类型的东西,例如:
Cont (const 42) :: Cont Int a如果只有callCC,我就没有办法约束r。
不管怎样,这是我的预感。不是很严谨,但似乎很有说服力。
https://stackoverflow.com/questions/2659629
复制相似问题