1
我試試,培訓,創建數據結構一樣Data.Tree:顯示實例奇怪的行爲
data MyTree a = Tree a [MyTree a]
但是我有一個麻煩,當我試圖爲這種數據結構創建顯示實例:
instance Show (MyTree a) where
show (Tree a [v]) = show a -- Only first element
我得到一個錯誤
No instance for (Show a)
arising from a use of `show'
這是一些奇怪的我。因爲我可以瀏覽功能顯示可以使用任何類型。
而第二個問題:在standart library使用獲得方法,但也有一些奇怪的 defenitions:
instance Eq a => Eq (Tree a)
instance Read a => Read (Tree a)
instance Show a => Show (Tree a)
instance Data a => Data (Tree a)
是什麼,這些手段?
還有另一種可能的漏洞潛伏在這種情況下:模式'[V]'只有匹配一個元素列表,所以'Tree a [v]'將無法匹配,例如'Tree 0 []'和'Tree 2 [Tree 1 [],Tree 0 []]'只需使用'v'以匹配任何東西(它只是一個變量);如果你不關心該值,則爲'_'('_'是一個通配符 - 它像變量一樣匹配,但不能在以後引用)。 –