gpt4 book ai didi

haskell - 使用类型类 Ord 的方法进行无限循环

转载 作者:行者123 更新时间:2023-12-02 16:06:59 27 4
gpt4 key购买 nike

我定义了一个数据类型:

Data Card = Card Int deriving (Show, Eq)

(我还定义了一个类型同义词:

Type Cards = [Card]

)

然后将其作为实例:

 instance Ord Card where
x > y |ix == iy = False
|ix == 0 = True
|iy == 0 = False
|otherwise = (ix > iy)
where
ix = label x
iy = label y

然后当我输入:

 (Card x) > (Card y) :: x,y are Int 

它可以工作,但是当我输入时:

 [(Card x)] > [(Card y)] :: x,y are Int 

它进入循环。

为什么会发生这种情况?我该如何修复它?

最佳答案

您的Ord Card 的实例只定义> ,但是you need to define either <= or compare :

Minimal complete definition: either compare or <=.

Ord列表的实例定义 compare就基础数据类型而言 compare 。默认compare<=是根据彼此定义的,因此如果您没有定义它们中的任何一个,它们在调用时不会终止。其他Ord列表的操作(包括 > )是根据 compare 定义的,因此为什么>当您调用 [Card] 时不会终止.

关于haskell - 使用类型类 Ord 的方法进行无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286168/

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