Thanks all, it works fine (see below). I lamentably try to make the same for show: > showTypeable :: (Typeable a) => a -> String > showTypeable x = case cast x of > Just x' -> show x' > Nothing -> ""
Because it really upsets me to add this show constraints to the Equ constructor ;) what if i want to make an Obs instance with non showable elements, with no intention to show it of course? Corentin > instance Typeable1 Obs where > typeOf1 _ = mkTyConApp (mkTyCon "Obs") [] > (===) :: (Typeable a, Typeable b, Eq b) => a -> b -> Bool > (===) x y = cast x == Just y > data Obs a where > Player :: Obs Player > Official :: Obs Bool > Equ :: (Eq a, Show a, Typeable a) => Obs a -> Obs a -> Obs Bool > Plus :: (Num a) => Obs a -> Obs a -> Obs a > Time :: (Num a) => Obs a -> Obs a -> Obs a > Minus :: (Num a) => Obs a -> Obs a -> Obs a > And :: Obs Bool -> Obs Bool -> Obs Bool > Or :: Obs Bool -> Obs Bool -> Obs Bool > Not :: Obs Bool -> Obs Bool > Konst :: (Show a, Eq a) => a -> Obs a > instance Show t => Show (Obs t) where > show Player = "Player" > show Official = "Official" > show (Equ a b) = (show a) ++ " Eq " ++ (show b) > show (Plus a b) = (show a) ++ " Plus " ++ (show b) > show (Minus a b) = (show a) ++ " Minus " ++ (show b) > show (Time a b) = (show a) ++ " Time " ++ (show b) > show (Konst a) = " (Konst " ++ (show a) ++ ")" > show (And a b) = (show a) ++ " And " ++ (show b) > show (Or a b) = (show a) ++ " Or " ++ (show b) > show (Not a) = " (Not " ++ (show a) ++ ")" > instance Eq t => Eq (Obs t) where > Player == Player = True > Official == Official = True > Equ a b == Equ c d = (a,b) === (c,d) > Plus a b == Plus c d = (a == c) && (b == d) > Minus a b == Minus c d = (a == c) && (b == d) > Time a b == Time c d = (a == c) && (b == d) > And a b == And c d = (a == c) && (b == d) > Or a b == Or c d = (a == c) && (b == d) > Not a == Not b = (a == b) > Konst a == Konst b = a == b > _ == _ = False
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe