[Haskell-cafe] Kind-agnostic type classes

Florian Weimer fw at deneb.enyo.de
Fri Oct 3 10:09:02 EDT 2008


* Derek Elkins:

> On Fri, 2008-10-03 at 12:22 +0200, Florian Weimer wrote:
>> I'm trying to encode a well-known, informally-specified type system in
>> Haskell.  What causes problems for me is that type classes force types
>> to be of a specific kind.  The system I'm targeting however assumes that
>> its equivalent of type classes are kind-agnositic.
>> 
>> For instance, I've got
>> 
>> class Assignable a where
>>     assign :: a -> a -> IO ()
>> 
>> class Swappable a where
>>     swap :: a -> a -> IO ()
>> 
>> class CopyConstructible a where
>>     copy :: a -> IO a
>> 
>> class (Assignable a, CopyConstructible a) => ContainerType a
>> 
>> class (Swappable c, Assignable c, CopyConstructible c) => Container c where
>>     size :: (Num i, ContainerType t) => c t -> IO i
>
> instane Container Maybe where...
>
> What does copy :: Maybe -> IO Maybe mean?

Maybe is not an instance of CopyConstructible, so this shouldn't
compile.  On the other hand, for IORef a,

  copy = (>>= newIORef) . readIORef

and for mutable arrays,

  copy = mapArray id

(if I'm not mistaken).


More information about the Haskell-Cafe mailing list