簡體   English   中英

無法識別Haskell數據類型

[英]Haskell data type not recognised

我得到以下代碼:

data Station a b = Machine a b
             | Line [Station a b]
        deriving(Show)

data Machine a b = Req [(a,Int)] b
    deriving(Show)


machine :: [(a, Int)] -> b -> Station a b
machine l b = Req l b

當我嘗試編譯時,它說機器的簽名是錯誤的。 它說是[[a,Int)]-> b->機器ab,而不是[[a,Int)]-> b->站a b。 但是在我的數據類型中,我說Station ab = Machine a b。 我不明白為什么這行不通?

您有兩件事叫做Machine 一個是返回Station類型的類型構造函數,另一個是類型。 即使它們共享相同的名稱,兩者也不相關。

通過在數據構造函數中添加' (質數)來消除兩個術語的歧義可能會有所幫助。 為此,我們可以將Machine'數據構造函數綁定為將Machine作為其唯一參數:

data Station a b = Machine' (Machine a b)
             | Line [Station a b]
        deriving(Show)

現在我們可以更新machine功能以使用新定義的構造函數:

machine :: [(a, Int)] -> b -> Station a b
machine l b = Machine' (Req l b)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM