這應該是非常簡單的,但我似乎無法繞過它。用戶定義列表實例
假設我有我自己的List類,在其接口中聲明head
和tail
。 List
應該是你期望的,那是一個同質物品的集合。 然後,我想創建一個實現List
接口的data
類型。
下面的代碼是我想到的,但它不起作用:你會如何解決它?
class List l where
head :: l -> a -- ERROR! How do I tell: given a list, return an element?
tail :: l -> l
data ConsList a = Nil | Cons a (ConsList a)
instance List (ConsList Int) where
head Nil = error "Empty List"
head (Cons h _) = h
tail Nil = error "Empty List"
tail (Cons _ t) = t
在此先感謝!
只是一個元註釋:對於Haskell初學者來說,經常聲明類是有點常見的。你可能只想編寫兩個類型爲'head :: ConsList a - > a'和'tail :: ConsList a - > ConsList a'的函數,而不是類。 – 2012-07-10 15:01:58
作爲一個更通用的「列表類」的例子,考慮parsec的['Stream'](http://hackage.haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim。html#t:Stream) – phg 2012-07-10 15:21:19
@DanielWagner我同意你的意見!我只是通過Okasaki的書來解決這個問題,這本書解釋了許多相同接口的實現,而我在第3頁遇到了這個問題。 – lbolla 2012-07-11 13:05:31