[Haskell-cafe] Newbie Q: Overloading and type classes

Luke Palmer lrpalmer at gmail.com
Sat Jun 7 15:08:11 EDT 2008


2008/6/7 Dmitri O.Kondratiev <dokondr at gmail.com>:
> class Store s where
>     put :: Eq k => (k, v) -> s  -> s
>     get :: k s -> Maybe v

I suspect you want this to be a constructor class.  That is, you want
to make explicit the fact that the type s depends on k and v.

class Store s where
    put :: Eq k => (k,v) -> s k v -> s k v
    get :: s k v -> Maybe v

If instead you have cell types which are restricted in what they can
store in different ways, you might explore fundeps or associated
types:

-- fundeps
class Store s k v | s -> k v where
    put :: (k,v) -> s -> s
    get :: s -> Maybe v

-- associated types
class Store s where
    type Key s :: *
    type Value s :: *
    put :: (Key s, Value s) -> s -> s
    get :: s -> Maybe (Value s)

But if you can get away with the former, I would recommend that before
looking into these advanced extensions.

Luke


More information about the Haskell-Cafe mailing list