gpt4 book ai didi

haskell - 如何在 Haskell 中创建具有多个参数的类型的 Foldable 实例?

转载 作者:行者123 更新时间:2023-12-05 07:50:39 26 4
gpt4 key购买 nike

我有一个数据类型:

data Box a b = Box a b

我想创建一个 BoxFoldable 实例,因为必须为 Foldable 实例提供某种类型的东西 * -> *,我将实例声明为:

instance Foldable (Box a) where
foldr f x (Box r s) = undefined

现在我只能做类似的事情:

foldr f x (Box r s) = f s x

foldr 的定义中,但如果不是在 s 上操作,我想做类似的事情:

foldr f x (Box r s) = f r x

编译器不允许我这样做,那么正确的方法是什么?

最佳答案

您已经找到了答案——您只是不喜欢它。无法按照您的要求进行操作,因为唯一可能的行为由 foldr 的签名确定。

一个新类型 newtype Flip t a b = Flip {unFlip::(t b a)} 的建议是解决这个问题的最标准方法,现在你可以写你的折叠在 Flip Box 而不是 Box 上。

关于haskell - 如何在 Haskell 中创建具有多个参数的类型的 Foldable 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35948278/

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