gpt4 book ai didi

haskell - Put 的 MonadFix 实例

转载 作者:行者123 更新时间:2023-12-04 14:32:03 25 4
gpt4 key购买 nike

一个简单的问题,我希望:binary包定义了两种类型, Get and Put .前者本质上是一个状态单子(monad),后者本质上是一个作家。国家和作家都有合理的MonadFix实例,所以我希望 GetPut也会。
Get做。 Put没有。那么,是否可以定义一个合适的 MonadFix Put 的实例(真的是 PutM )?

一个更普遍的问题是:通常如何验证类型类实例实际上满足该类型类的规则?

最佳答案

正如您在二进制包 ( Data.Binary.Put:71 ) 的源代码中所见,用于一元值的数据结构在构建器中是严格的。由于从 monad 中提取值必须强制找到值所在的结构,如果构建器依赖于输入,这将导致无限循环。

data PairS a = PairS a !Builder
newtype PutM a = Put { unPut :: PairS a }

所以你可以写一个 MonadFix例如,但你将无法用它做任何有用的事情。但我不认为你可以用 MonadFix 做任何有用的事情。无论如何,至少没有什么是你不能用普通的 fix 做的, 因为 PutM monad 基本上是 Writer Builder (但有专门的实现)。

至于你的第二个问题,它与第一个无关,因此您应该将其作为一个单独的问题提出。

关于haskell - Put 的 MonadFix 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068461/

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