gpt4 book ai didi

haskell - 嵌套参数化类型的实例

转载 作者:行者123 更新时间:2023-12-02 00:22:58 25 4
gpt4 key购买 nike

鉴于我有数据类型

data A a = A a
data B b = B b

和类型类

class C c where
f :: c a -> a

现在类 C 需要一种 * -> * 类型,所以我可以这样做

instance C A where
f (A a) = a

instance C B where
f (B b) = b

现在给出一个函数,例如:

ab :: b -> A (B b)
ab = A . B

如何为结果类型声明 C 实例?

我首先可能能够使用 TypeSynonymInstances 的类型同义词,如下所示:

type AB b = A (B b)
class C AB where
f (A (B b)) = b

特别是因为 ghci 报告了正确的类型:

*Main> :k AB
AB :: * -> *

但是,您似乎无法在实例声明中(或任何地方)使用部分应用的类型同义词。

是否有某种方法可以像构造构造函数一样构造类型 AB ,或者使用其他语法来声明此类嵌套类型的实例?

最佳答案

最简单的可能是定义

newtype AB a = AB { unAB :: A (B a) }

GHC 应该能够为此派生一个 C 实例。

您还可以使用 TypeCompose为了实现这一点,

type AB = A :. B

instance C AB where
f = f . f . unO

关于haskell - 嵌套参数化类型的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320646/

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