On Sat, 2008-06-21 at 00:04 +0200, Pieter Laeremans wrote: > HI, > > What 's wrong with this:
It looks like you think Haskell is an OO language or want it to be. It is not. > > type Id = String > > class Catalog a where > listItems :: a -> IO [String] > getItem :: a -> Id -> IO (Maybe String) > > class Item a where > getCatalog :: Catalog catalog => a -> catalog This means class Item a where getCatalog :: forall catalog. Catalog catalog => a -> catalog That means, given some Item a, I can create a value of -any- type that is an instance of Catalog. There is no well-defined function that could do that. > > data Catalog c => Content c = Content {auteur :: String, inhoud:: > String, catalog::c} > > instance Catalog c => Item (Content c) where > getCatalog (Content _ _ c) = c > > I get this as error from ghci: > > Couldn't match expected type `catalog' against inferred type `c' > `catalog' is a rigid type variable bound by > the type signature for `getCatalog' > at > ../Sites/liberaleswebsite/www.liberales.be/cgi-bin/Test.hs:16:26 > `c' is a rigid type variable bound by > the instance declaration > at > ../Sites/liberaleswebsite/www.liberales.be/cgi-bin/Test.hs:20:17 > In the expression: c > In the definition of `getCatalog': getCatalog (Content _ _ c) = c > In the definition for method `getCatalog' > Failed, modules loaded: none. > > thanks in advance, > > P > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe