gpt4 book ai didi

haskell - 自定义数据类型的繁琐 Ord 实现

转载 作者:行者123 更新时间:2023-12-03 14:24:45 27 4
gpt4 key购买 nike

我在 Haskell 中创建了一个数据类型:

type Name = String
data ModelNode = NodeAttribute Name |
NodeRelation (Name,Name) |
NodeConstraint Name |
NodeKPI Name

我需要这个类型作为 Ord 的一个实例.我想出的实现是:
instance Ord ModelNodeKind where
compare (NodeAttribute n) (NodeAttribute n') = compare n n'
compare (NodeAttribute _) _ = LT
compare _ (NodeAttribute _) = GT
compare (NodeRelation n) (NodeRelation n') = compare n n'
compare (NodeRelation _) _ = LT
compare _ (NodeRelation _) = GT
compare (NodeConstraint n) (NodeConstraint n')= compare n n'
compare (NodeConstraint _) _ = LT
compare _ (NodeConstraint _) = GT
compare (NodeKPI n) (NodeKPI n') = compare n n'

在优雅简洁的 Haskell 世界中,这对我来说看起来有点麻烦。是否有任何技巧/语法规则可以使它更简单?或者我应该将我的数据类型重新设计为:
data ModelNodeType = NodeAttribute | NodeRelation | NodeConstraint | NodeKPI
data ModelNode = ModelNode ModelNodeType Name Maybe Name

毕竟,这在语义上是不正确的。或者
data ModelNodeTypeSingle = NodeAttribute | NodeConstraint | NodeKPI
data ModelNode = ModelNode ModelNodeTypeSingle Name |
ModelNodeRelation (Name,Name)

这简化了 Ord 的实现,但数据类型本身变得不那么可读了?

最佳答案

据我所知,您的 Ord实例等价于可推导的实例。做就是了

data ModelNode = NodeAttribute Name | 
NodeRelation (Name,Name) |
NodeConstraint Name |
NodeKPI Name
deriving (Eq,Ord)

关于haskell - 自定义数据类型的繁琐 Ord 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24572223/

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