2017-05-30 81 views
1

我想在Haskell中定義數據類型。該數據類型將被稱爲 節點。它將能夠包含參數類型a或Nothing。我定義它如此:構建參數數據類型

data Node a = Node (Maybe a) deriving (Show) 

當我加載它在G​​HC以下工作 節點沒有

然而,當我如 鍵入此節點(6)

我得到以下錯誤:

Non type-variable argument in the constraint: Num (Maybe a) 
    (Use FlexibleContexts to permit this) 
    When checking that ‘it’ has the inferred type 
     it :: forall a. Num (Maybe a) => Node a 

這是爲什麼?我究竟做錯了什麼?

回答

4

您已經定義使用Maybe您的數據類型,所以你必須包裝在Just值:

Node (Just 6). 

如果你只是希望有這樣一種類型,可以是空的或有定義的值,在定義它通過以下方式:

data Node b = Empty | Node b deriving (Show) 
+0

非常感謝。它適用於Just。如果我想構建一個節點,它可以在不使用Just字詞的情況下獲取或者可以是空的,有沒有辦法做到這一點? – eitan

+0

@eitan查看我的更新回答。 – syntagma

+0

非常感謝。通過這個例子以及克里斯的解釋,我認爲我明白了。乾杯。 – eitan

5

聲明data Node a = Node (Maybe a) deriving (Show)創建數據構造換句話說,(這是一個功能)Node :: Maybe a -> Node a類型的,你需要通過Maybe a類型的值到t他的功能。

你已通過6這是不是Maybe a類型。

相反,您可以通過Just 6這樣的值: Node (Just 6)

+0

非常感謝。這個解釋讓我更加清楚。乾杯。 – eitan