2017-04-15 16 views
1

我一直被困在一個特定的情況。我不確定什麼錯誤是誠實的。使用流封裝/數據類型的錯誤

data Stream a = Cons a (Stream a) 
streamToList :: Stream a -> [a] 
streamToList (Cons x (Stream xs)) = x: streamToList (Stream xs) 

做這樣的事情,我不在範圍內得到:數據構造「流」,所以我一派錯誤和一些解決方案要改變流較低的情況下

data Stream a = Cons a (Stream a) 
streamToList :: Stream a -> [a] 
streamToList (Cons x xs) = x: streamToList (stream xs) 

但然後我得到的圖案解析錯誤:流

我試圖導入Data.Stream(Google搜索上Hoogle),但找不到模塊「Data.Stream」

目前使用的Haskell從Ubuntu的軟件包

回答

1
streamToList :: Stream a -> [a] 
streamToList (Cons x xs) = x : streamToList xs 

Stream是一個類型的名字,所以它可以對::右手側處。但它不是數據構造函數,所以它不能用作值或模式匹配。

Cons是數據構造函數的名稱,所以它可以用作值或模式匹配。但它不是一種類型。

+0

我該如何去測試我的功能?使用缺點考慮它是數據構造函數?我是否也會派生Show,Eq,Ord? –

+0

@BaoThai你可以派生它們,但這些類型類在無限流中不是很有用。 – ephemient

+0

我將不得不派生它作爲實例Show a => Show(Stream a - > String)或? @ephemient –