2014-09-21 83 views
7

我跟着書來定義Tree數據類型,但是show不能正常工作。爲什麼?Haskell爲什麼不能推斷Tree類型?

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show) 

test = show EmptyTree 

提供錯誤消息:

No instance for (Show a0) arising from a use of ???show??? 
The type variable ???a0??? is ambiguous 
Note: there are several potential instances: 
    instance Show a => Show (Tree a) 
    -- Defined at /Users/gzhao/Documents/workspace/hsTest2/src/Tree.hs:3:62 
    instance Show Double -- Defined in ???GHC.Float??? 
    instance Show Float -- Defined in ???GHC.Float??? 
    ...plus 25 others 
In the expression: show EmptyTree 
In an equation for ???test???: test = show EmptyTree 
+0

你是如何運行的代碼?你在使用解釋器(ghci)嗎?這一行:'test = show EmptyTree'不是有效的Haskell語法,所以你可能不會粘貼你的所有代碼。 – rburny 2014-09-21 18:19:38

+2

@rburny我認爲OP在源文件中有。 – Sibi 2014-09-21 18:20:09

+0

我正在使用Eclipse – 2014-09-22 01:20:06

回答

15

的問題是,EmptyTree具有類型爲Tree a任何類型a。儘管它實際上不會影響最終輸出,但編譯器想要知道您的意思是哪一個a

最簡單的解決方法是選擇特定類型,例如與show (EmptyTree :: Tree())。本品採用單元(),這在某種意義上是一個最簡單的類型,但你也可以使用具有Show實例的任何其他類型的,像IntString

+0

+1,'()'是要走的路。 :) – Sibi 2014-09-21 18:19:22

+0

謝謝@Ganesh Sittampalam。有用。 – 2014-09-22 01:18:57

相關問題