我需要構建自定義流數據類型。 這就像列表數據類型,但僅限於無限列表(沒有空列表的可能性)。非法綁定的內置語法:`:`
我發現列表中的數據類型 -
data [] a = a : [a] | []
,我寫了這個:
data Stream a = a : (Stream a)
但GHCI給出錯誤信息:
非法的結合內置的語法:
這是什麼問題,我的數據類型聲明?
我需要構建自定義流數據類型。 這就像列表數據類型,但僅限於無限列表(沒有空列表的可能性)。非法綁定的內置語法:`:`
我發現列表中的數據類型 -
data [] a = a : [a] | []
,我寫了這個:
data Stream a = a : (Stream a)
但GHCI給出錯誤信息:
非法的結合內置的語法:
這是什麼問題,我的數據類型聲明?
構造函數(:)
是標準列表類型的內置語法,與標準庫中定義的標準「內置」類型不同。
因此,您需要爲流類型使用不同的構造函數。 (:|)
和(:<)
是我見過的版本,所以是這樣的:
data Stream a = a :< Stream a
...應該能正常運行。
你也可能下降綴構造完全如果你喜歡:
data Stream a = Stream a (Stream a)
構造函數(<)工作正常。謝謝! :) – 2013-05-06 18:39:15
注意:您可以使用現有的Data.Stream.Infinite
從streams
包用於此目的,並得到一噸的實例和組合程序爲免費的,但(:)
本身是建立在語法。
'data [] a = a:[a] | []'只是pseduo-syntax。這不是真正有效的Haskell。 – hammar 2013-05-06 17:30:32