On 6/18/08, Edsko de Vries <[EMAIL PROTECTED]> wrote:
> Regarding type classes, I'm not 100% what the logical equivalent is,
> although one can regard a type such as
>
> forall a. Eq a => a -> a
>
> as requiring a proof (evidence) that equality on a is decidable. Where
> this sits formally as a logic I'm not sure though.
You can take the minimalist view and treat a typeclass parameter as an
explicitly passed dictionary; that is:
(Eq a => a -> a)
is isomorphic to
(a -> a -> Bool, a -> a -> Bool) -> a -> a
In fact, this is basically what GHC does.
You then treat an instance declaration:
instance Eq Int where
(==) = eqInt#
(/=) = neqInt#
as just a constant
Eq_Int = (eqInt#, neqInt#)
-- ryan
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe