ConstraintKinds and default associated empty constraints

wren ng thornton wren at freegeek.org
Mon Jan 9 06:21:13 CET 2012


On 1/8/12 8:32 AM, Bas van Dijk wrote:
> On 23 December 2011 17:44, Simon Peyton-Jones<simonpj at microsoft.com>  wrote:
>> My attempt at forming a new understanding was driven by your example.
>>
>> class Functor f where
>>     type C f :: * ->  Constraint
>>     type C f = ()
>>
>> sorry -- that was simply type incorrect.  () does not have kind *  ->
>> Constraint
>
> So am I correct that the `class Empty a; instance Empty a` trick is
> currently the only way to get default associated empty constraints?

Couldn't the following work?

     class Functor f where
         type C f :: * -> Constraint
         type C f _ = ()

It seems to me that adding const to the type level (either implicitly or 
explicitly) is cleaner and simpler than overloading () to be Constraint, 
*->Constraint, *->*->Constraint,...

-- 
Live well,
~wren



More information about the Glasgow-haskell-users mailing list