gpt4 book ai didi

Haskell MonadState 工具 put with modify

转载 作者:行者123 更新时间:2023-12-04 04:37:38 24 4
gpt4 key购买 nike

我想用修改实现放置

    put :: s -> m ()
modify :: (s -> s) m s

当我做
    put s = modify $ const((), s)

我得到错误,
预期类型:m()
实际类型:m((), s)
我试过这样的事情
    modify $ const((), s) >>= \x -> return (fst x)

得到预期的类型 m()
但这个解决方案不起作用

有人可以向我解释如何使用修改来实现放置吗?
感谢您的时间和帮助。

最佳答案

modify有类型

modify :: (MonadState s m) => (s -> s) -> m ()

第一个参数是一个普通的 s -> s修改状态的函数。因此,当您尝试使用 const 走在正确的轨道上时,您不必将状态放在元组中:
put s = modify $ const s

请注意,虽然您可以定义 putmodify 方面,这意味着您将无法给出 modify 的一般定义。 ;相反,你必须为每个具体的 monad 做这件事,它是 MonadState 的一个实例。 .这解释了为什么,在 Control.Monad.State , getputMonadState 的类方法:如何实现它们取决于特定的状态 monad。 modify ,然后,根据 get 定义和 put .

关于Haskell MonadState 工具 put with modify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19455480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com