我有一个问题。我想实现比较两个节点并给出排序的函数,其中节点具有以下结构:
data Node a = Node { label :: a, adjacent :: [(a,Int)] } deriving Show
sortNode:: Node a->Node a->Ordering
sortNode node1 node2
| takeLabel node1 > takeLabel node2 = GT
| takeLabel node1 < takeLabel node2 = LT
| takeLabel node1 == takeLabel node2 = EQ
拥抱抱怨这个
ERROR "Network.hs":35 - Cannot justify constraints in explicitly typed binding
*** Expression : sortNode
*** Type : Node a -> Node a -> Ordering
*** Given context : ()
*** Constraints : Ord a
你能解释一下吗?(我是哈斯克尔的初学者)
答案 0 :(得分:3)
sortNode 的类型签名指定空上下文但(&lt;)和(&gt;)要求类型 a 是类 Ord <的实例/ strong>和(==)要求它是类 Eq 的实例。您需要在Nikita建议的情况下向上下文添加约束,或者省略显式类型签名,解释器将能够推断它。
sortNode :: (Ord a) => Node a -> Node a -> Ordering