
Hi, The program below is accepted by "ghc -fno-monomorphism-restriction" and "hugs +98". Why can't nhc98 (v1.18) handle it? Tossing in something like: instance PP () default (()) looks a bit stupid in order to become "portable", doesn't it? If I replace PP by Show (and pp by show and omit the class declaration) nhc98 has no problem. Also if I replace one occurrence of fA or fB directly with pp it goes through. Cheers Christian
hmake -nhc98 MutualRekursion.hs nhc98 -c -o MutualRekursion.o MutualRekursion.hs ====== Errors after type inference/checking: No default for MutualRecursion.PP at 23:1-24:18.(174,[(148,187)]) No default for MutualRecursion.PP at 19:1-20:18.(183,[(148,186)])
-- -------------------------------------------------------------------- module MutualRecursion where data A a = A a | BasA (B a) data B a = B a | AasB (A a) class PP a where pp :: a -> String instance PP a => PP (A a) where pp (A a) = pp a pp (BasA b) = pp b instance PP a => PP (B a) where pp (B a) = pp a pp (AasB b) = pp b fA :: PP a => A a -> String fA (A a) = pp a fA (BasA b) = fB b fB :: PP a => B a -> String fB (B b) = pp b fB (AasB a) = fA a

Sorry, that I came up again with such an old bug (a pity it isn't fixed yet) http://www.cs.york.ac.uk/fp/nhc98/nhc-users-archive/0107.html Christian I wrote:
No default for MutualRecursion.PP at 23:1-24:18.(174,[(148,187)]) No default for MutualRecursion.PP at 19:1-20:18.(183,[(148,186)])
-- --------------------------------------------------------------------
module MutualRecursion where
data A a = A a | BasA (B a)
data B a = B a | AasB (A a)
class PP a where pp :: a -> String
instance PP a => PP (A a) where pp (A a) = pp a pp (BasA b) = pp b
instance PP a => PP (B a) where pp (B a) = pp a pp (AasB b) = pp b
fA :: PP a => A a -> String fA (A a) = pp a fA (BasA b) = fB b
fB :: PP a => B a -> String fB (B b) = pp b fB (AasB a) = fA a
participants (1)
-
Christian Maeder