Peter Padawitz wrote: > Jules Bean wrote: >> I don't see why! >> >> In the class >> >> class Foo a where >> f :: a -> Int >> g :: b -> Integer >> g = fromIntegral . f >> >> The equations within the class are defaults, not equations. > > I must admit that I didn't know this... Nevertheless, won't you agree that > the default and the actual instance should be semantically equivalent?
It depends on the class, or maybe on your notion of semantical equivalence. As an example, look at the Show class. Its interface is > class Show a where > showsPrec :: Int -> a -> ShowS > show :: a -> String > showList :: [a] -> ShowS showsPrec has a default implementation in terms of show, and show a default implementation in terms of showsPrec. Instances may refine showsPrec but should still satisfy show x = shows x "". However, the most interesting function here is showList. It comes with a default implementation that renders a list as "[item1,...]". showList is used in the Show instance for lists: > instance Show a => Show [a] where > showsPrec _ = showList By redefining showList for Char, we get a prettier representation for String values. Bertram _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
