haskell - Haskell作业中类型构造函数的问题
问题描述
我已经创建了一个数据类型,并且需要使用实例将其设为相等类型类的实例。我的数据类型由值 R a b 组成。我想让R x y
等于R c d
ifx
等于c
和y
等于d
。
这是我到目前为止编写的代码。它不编译。
data Row a b = R a b deriving (Show)
instance Eq (Row a b) where
(R x y) == (R c d) = (x == c) && (y == d)
_ == _ = False
我认为这可能是错误的,因为类型 a 和 b 不一定必须在 Equality 类型类中。我不知道如何解决这个问题。
解决方案
您只能检查两个R a b
s 是否相等,因为您可以检查a
和的项目b
是否相等。因此,您需要将这些添加为类型约束:
instance (Eq a, Eq b) => Eq (Row a b) where
(R x y) == (R c d) = (x == c) && (y == d)
_ == _ = False
但是请注意,您不需要自己实现该Eq
实例。如果您希望两个R a b
s 在数据构造函数相同的情况下相同,并且它们对应的参数相同,那么您只需让编译器为您派生实例:
data Row a b = R a b deriving (Eq, Show)
推荐阅读
- graphql - 从 GraphQL 到 Teradata 的数据库连接器
- html - 悬停表格单元格时显示弹出窗口
- php - Laravel 数据库错误“找不到驱动程序”
- r - 如何导出(到 word 或 ppt)在 R 中生成的可编辑图形?
- python - 带有新空文件的 NewDirectory
- flutter - 无上下文的颤振本地化
- c# - C#:对 exe 使用大图标
- javascript - 是否可以通过外部 .js 文件访问 Handlebar 变量?
- reactjs - 如何解决未安装的组件?
- sharepoint - 如何在 SharePoint Online 中修改 AppCatalog 网站的权限