haskell,打字订购

时间:2013-04-24 13:20:44

标签: haskell hugs

我有一个问题。我想实现比较两个节点并给出排序的函数,其中节点具有以下结构:

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

你能解释一下吗?(我是哈斯克尔的初学者)

1 个答案:

答案 0 :(得分:3)

sortNode 的类型签名指定空上下文但(&lt;)和(&gt;)要求类型 a 是类 Ord <的实例/ strong>和(==)要求它是类 Eq 的实例。您需要在Nikita建议的情况下向上下文添加约束,或者省略显式类型签名,解释器将能够推断它。

sortNode :: (Ord a) => Node a -> Node a -> Ordering