1

問題が 1 つあります。2 つのノードを比較して順序付けを行う関数を実装したいと思います。ここで、ノードは次の構造です。

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

説明してもらえますか? (私は Haskell の初心者です)

4

1 に答える 1

3

sortNodeの型シグネチャは空のコンテキストを指定していますが、(<) と (>) は型aがクラスOrdのインスタンスである必要があり、(==) はそれがクラスEqのインスタンスである必要があります。ニキータが提案したようにコンテキストに制約を追加するか、明示的な型シグネチャを省略して、インタープリターがそれを推測できるようにする必要があります。

sortNode :: (Ord a) => Node a -> Node a -> Ordering
于 2013-04-24T13:47:49.520 に答える