Это упрощенная версия моей проблемы.Типы фантомов в Haskell
У меня рекурсивная структура данных (Stream1). Когда я вводил фантомные типы (поток a), рекурсивное описание (т. Е. T1) больше не работает. С другой стороны, t2 отлично работает, создавая бесконечную структуру, так как напрямую использует Stream1. Мне нужно использовать preI конструктора, например, в t1. Что мне не хватает? Мне нужно t1 вести себя как t2, т. Е. Возвращать бесконечный поток.
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
Вы не сказали, в чем проблема, но попробуйте изменить 'Stream' на' newtype' (вместо 'data'). – melpomene
(Я обновил описание проблемы) Да, это, похоже, решило проблему. Большое спасибо! – ami