Dies ist eine vereinfachte Version meines Problems.Phantom-Typen in Haskell
Ich habe eine rekursive Datenstruktur (Stream1). Wenn ich Phantom-Typen einführte (Stream a), funktioniert eine rekursive Beschreibung (d. H. T1) nicht mehr. Auf der anderen Seite funktioniert t2 gut, indem eine unendliche Struktur erstellt wird, da Stream1 direkt verwendet wird. Ich brauche den Konstruktor preI, wie in t1. Was vermisse ich? Ich brauche t1, um sich wie t2 zu verhalten - das heißt, einen unendlichen Strom zurückgeben.
data Stream a = Stream Stream1
deriving (Eq, Show)
data Stream1 = PreI Integer Stream1
deriving (Eq, Show)
preI :: Integer -> Stream Int -> Stream Int
preI n (Stream s) = Stream (PreI n s)
t1 :: Stream Int
t1 = let x = preI 0 x
in x
t2 :: Stream Int
t2 = let x = PreI 0 x
in Stream x
Sie haben nicht gesagt, was das Problem ist, aber versuchen Sie 'Stream' in einen' newtype' (anstelle von 'data') zu ändern. – melpomene
(Ich aktualisierte die Beschreibung des Problems) Ja, das scheint das Problem gelöst zu haben. Danke vielmals! – ami