module Quant(main) where import Prelude {- data Rose (f :: Type -> Type) a = Branch a (f (Rose f a)) instance forall a (f :: Type -> Type) . (Eq a, forall b. (Eq b) => Eq (f b)) => Eq (Rose f a) where (Branch x1 c1) == (Branch x2 c2) = x1==x2 && c1==c2 t1 :: Rose [] Int t1 = Branch 1 [Branch 2 [], Branch 3 []] main :: IO () main = do print $ t1 == t1 -} data T (f :: Type -> Type) a = C (f a) eq :: forall a (f :: Type -> Type) . (Eq a, forall b. (Eq b) => Eq (f b)) => T f a -> T f a -> Bool eq (C xxx) (C yyy) = xxx == yyy