> I defined type recursion and naturals as > >newtype Mu f = In {unIn :: f (Mu f)} > >data N f = S f | Z > >type Nat = Mu N
> An application of Mu should be showable if the functor maps showable types > to showable types, so the most natural way to define the instance seemed > to be > instance (Show a => Show (f a)) => Show (Mu f) where > show (In x) = show x > Of course that constraint didn't work. Well, it can if we write it in a bit different way: instance (Show (f (Mu f))) => Show (Mu f) where show (In x) = show x instance Show (N (Mu N)) where show Z = "Z" show (S k) = "S "++show k *Main> show (In (S (In (S (In Z))))) "S S Z" This solution is akin to that of breaking the type recursion when defining the fixpoint combinator fix. Only here we face the recursion on constraints. I believe the same solution should work for the Observable class. You didn't post the definition of the Observable class, so I couldn't test my claim. Flags used: ghci -fglasgow-exts -fallow-undecidable-instances /tmp/a.hs _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell