延续单子“接口”

发布于 2024-08-29 02:53:59 字数 625 浏览 9 评论 0原文

状态 monad“接口”

class MonadState s m where
    get :: m s
    put :: s -> m ()

(+ 返回和绑定)允许使用状态 monad 构造任何可能的计算,而无需使用 State 构造函数。例如,状态 $ \s -> (s+1, s-1) 可以写成

 do s <- get
    put (s-1)
    return (s+1)

类似地,我永远不必使用 Reader 构造函数,因为我可以使用 ask 创建该计算, 返回(>>=)。准确地说:Reader f == Ask >>= return 。 f。

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

The state monad "interface"

class MonadState s m where
    get :: m s
    put :: s -> m ()

(+ return and bind) allows to construct any possible computation with State monad without using State constructor. For example, State $ \s -> (s+1, s-1) can be written as

 do s <- get
    put (s-1)
    return (s+1)

Similarily, I never have to use Reader constructor, because I can create that computation using ask, return and (>>=). Precisely: Reader f == ask >>= return . f.

Is it the same true for continuations - is it possible to write all instances of Cont r a using callCC (the only function in MonadCont), return and bind, and never type something like Cont (\c -> ...)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初熏 2024-09-05 02:53:59

我不这么认为。查看类型:

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

无论如何,这是我的预感。虽然不是很严格,但看起来很有说服力。

I don't think so. Looking at the types:

Cont :: ((a -> r) -> r) -> Cont r a
callCC :: ((a -> Cont r b) -> Cont r a) -> Cont r a

If you only have callCC, there is no use of r as a type anywhere - it could be of any kind. So I don't know how you could translate something that uses it as a type, eg:

Cont (const 42) :: Cont Int a

I have no way of constraining r if I only have callCC.

Anyway, that's my hunch. Not terribly rigorous, but it seems convincing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文