首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延续monad "interface“

延续monad "interface“
EN

Stack Overflow用户
提问于 2010-04-18 03:09:02
回答 1查看 684关注 0票数 10

状态单子“接口”

代码语言:javascript
复制
class MonadState s m where
    get :: m s
    put :: s -> m ()

(+ return and bind)允许在不使用State构造函数的情况下使用State monad构造任何可能的计算。例如,State $ \s -> (s+1, s-1)可以编写为

代码语言:javascript
复制
 do s <- get
    put (s-1)
    return (s+1)

类似地,我永远不需要使用Reader构造函数,因为我可以使用askreturn(>>=)创建计算。准确地说:Reader f == ask >>= return . f

对于continuations也是如此吗?是否有可能使用callCC (MonadCont中唯一的函数)编写Cont r a的所有实例,返回并绑定,并且永远不会输入类似Cont (\c -> ...)的内容

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-18 06:23:21

我不这样认为。看看这些类型:

代码语言:javascript
复制
Cont :: ((a -> r) -> r) -> Cont r a
callCC :: ((a -> Cont r b) -> Cont r a) -> Cont r a

如果您只有callCC,那么在任何地方都不能使用r作为类型-它可以是任何类型。所以我不知道你如何翻译一些使用它作为类型的东西,例如:

代码语言:javascript
复制
Cont (const 42) :: Cont Int a

如果只有callCC,我就没有办法约束r

不管怎样,这是我的预感。不是很严谨,但似乎很有说服力。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2659629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档