[Haskell-cafe] What's wrong with the classes/insances?

Derek Elkins derek.a.elkins at gmail.com
Fri Jun 20 18:37:23 EDT 2008


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
> 



More information about the Haskell-Cafe mailing list