At 13:15 2002-01-22 -0500, Hongwei Xi wrote: ><...> >In Haskell, I guess that the one implemented later is always chosen. >Why can't I have two different implementations for an interface?
Actually, I can't think of situations where I would desire this. Could you please give an example? >Another problem with Haskell classes is that there is currently >no way of hiding type information. For instance, suppose that >I want to implement a module for operations on sets but I do >not want to reveal what data representation I use for sets. Is >there a way of doing this in Haskell? > >--Hongwei There is: Use restricted exports. Only export functions on the datatype, and don't export the datatype itself. For example: ----------------------- Module Set ( emptySet , makeSet , firstOfSet ) where -- Not exported, only locally visible data Set a = EmptySet | OneElementSet a -- Using these functions, everyone can -- make, change and read Set's emptySet :: Set a emptySet = EmptySet makeSet :: a -> Set a makeSet x = OneElementSet x firstOfSet :: Set a -> a firstOfSet EmptySet = error "Set.firstOfSet: Empty set" firstOfSet (OneElementSet x) = x ----------------------- Regards, Rijk-Jan van Haaften _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell