Given the following:
> > import Data.Maybe ( fromMaybe ) > > data None > none = error "none evaluated" :: None these class and instance declarations: > class ToMaybe2 b a where toMaybe2 :: a -> Maybe b > instance ToMaybe2 a None where toMaybe2 = const Nothing > instance ToMaybe2 a a where toMaybe2 = Just compile fine (given -fallow-undecidable-instances and -fallow-overlapping-instances). And the following code: > mbPutStrLn :: ToMaybe2 String a => a -> IO () > mbPutStrLn = putStrLn . fromMaybe "None." . toMaybe2 > main = mbPutStrLn none >> mbPutStrLn "Hello, world!" works as I'd expect. However, if the parameters to the class are reversed: > {- uncomment to see error message > class ToMaybe1 a b where toMaybe1 :: a -> Maybe b > instance ToMaybe1 None a where toMaybe1 = const Nothing > instance ToMaybe1 a a where toMaybe1 = Just > -} I get the following error message (from GHC{,i} 6.2): Overlapping instance declarations: OverlapOrder.lhs:27: ToMaybe1 None a OverlapOrder.lhs:28: ToMaybe1 a a Why is this? thanks, mike _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users