[Haskell-cafe] What's wrong with the classes/insances?
Dan Weston
westondan at imageworks.com
Fri Jun 20 18:25:48 EDT 2008
I think the problem is here:
> getCatalog :: Catalog catalog => a -> catalog
This wants to constrain the result of getCatalog to be an instance of
Catalog, but this only works for function arguments, not results. The
following code does typecheck, though I have no idea what is does or if
it is what you want:
type Id = String
class Catalog a where
listItems :: a -> IO [String]
getItem :: a -> Id -> IO (Maybe String)
class Catalog q => Item q a where
getCatalog :: a -> q
data Content d = MkContent {auteur :: String,
inhoud :: String,
catalog :: d}
instance Catalog c => Item c (Content c) where
getCatalog (MkContent _ _ e) = e
Pieter Laeremans wrote:
> HI,
>
> What 's wrong with this:
>
> 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
>
> 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