gpt4 book ai didi

haskell - 使用构造函数的一部分在 Haskell 数据中派生实例

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

我需要为数据导出 Eq,但对于某些构造函数,我想忽略某些字段。数据用于表示数据类型(我们正在开发编译器):

data DataType
= Int | Float | Bool | Char | Range | Type
| String Width
| Record (Lexeme Identifier) (Seq Field) Width
| Union (Lexeme Identifier) (Seq Field) Width
| Array (Lexeme DataType) (Lexeme Expression) Width
| UserDef (Lexeme Identifier)
| Void | TypeError
deriving (Ord)

我需要从它出现的每个构造函数中忽略 Width 字段

最佳答案

如果您希望使用自定义 Eq 语义,则无法派生 Eq。您必须手动编写一个实例。

一个常见的技巧是:

  • 定义一个 DataType' 来删除您希望忽略的字段
  • 为此推导Eq
  • 将 DataType 的 Eq 定义为 a == b = toDataType' a == toDataType' b

这至少使它不那么特别,在它自己的类型中捕获不同的 Eq 语义,/可以/从中派生。

关于haskell - 使用构造函数的一部分在 Haskell 数据中派生实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931592/

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