2017-04-15 3 views
1

Ich habe mit einer bestimmten Situation festgefahren. Ich bin mir nicht sicher, was der Fehler ist, um ehrlich zu sein.Fehler mit Stream-Paket/Datentyp

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

so etwas wie dies tun, habe ich in ihrem Umfang nicht: Daten Konstruktor 'Stream, so gegoogelt ich den Fehler und einige Lösungen waren Strom auf einen niedrigeren Fall

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

Aber ändern ich bekomme dann Einlesefehler in Muster: Strom

ich versuchte Data.Stream (googeln auf Hoogle) importieren aber konnte nicht Modul ‚Data.Stream‘

Zeit mit Haskell von Ubuntu-Pakete

Antwort

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

Stream ist der Name eines Typs finden, so dass es auf der rechten Seite von :: verwendet werden. Aber es ist kein Datenkonstruktor, daher kann es nicht als Wert oder in Musterübereinstimmungen verwendet werden.

Cons ist der Name eines Datenkonstruktors, daher kann er als Wert oder in Musterübereinstimmungen verwendet werden. Aber es ist kein Typ.

+0

Wie würde ich meine Funktionalität testen? Verwenden Sie Cons unter Berücksichtigung, dass es der Datenkonstruktor ist? würde ich auch die Show, Eq, Ord ableiten? –

+0

@BaoThai Sie können sie ableiten, aber diese Typklassen sind in einem unendlichen Stream nicht sehr nützlich. – ephemient

+0

Müsste ich es als Instanz ableiten Show a => Show (Stream a -> String) oder? @ephemient –