gpt4 book ai didi

Haskell 记录,更干净的方法?

转载 作者:行者123 更新时间:2023-12-02 03:40:01 26 4
gpt4 key购买 nike

我已经了解了 Haskell 记录的一些问题,特别是同一模块中的两个元素不能具有相同的名称。

我知道您可以通过使用单独的模块来解决这个问题,但我不想这样做,而是尝试了这种方法:

class HasX a where
x :: a -> X

data D1 = D1 { d1_x :: X, ... }
instance HasX D1 where
x = d1_x

data D2 = D2 { d2_x :: X, ... }
instance HasX D2 where
x = d2_x

(这只能获取,不能设置,我当然需要编写更多代码来进行设置)。

但是,所有这些的类和实例声明似乎都像样板文件,应该可以使用模板 haskell 或其他东西来消除。

是否有 GHC 的库或扩展可以使这种方法编写起来不那么困惑?

最佳答案

看来Data.Has封装了您正在寻找的很多内容。在他们的词汇中,我认为他们的 Knows 类型类更接近您的 Has,并且它还提供了注入(inject)签名。

他们还使用标签机制来处理我认为您尚未考虑过的问题:包含具有相同类型的字段的记录。他们使用类型级标签来消除歧义。

为了方便起见,似乎还提供了一些支持,为 Has-TH 中带有模板 Haskell 的 Has 实例提供了生成器。

您可以在类型魔术师 Oleg 的作品中找到更多类型级别标签和其他与记录相关的 Material ,例如 OOHaskell (还有 Ralf Lämmel)。

关于Haskell 记录,更干净的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427217/

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