[Haskell-cafe] ANN: exists-0.1
yves.pares at gmail.com
Tue Feb 7 12:49:27 CET 2012
Are there documentation on constraints being types, how they can be
declared/handled and what are the interests?
2012/2/7 Mikhail Vorozhtsov <mikhail.vorozhtsov at gmail.com>
> On 02/06/2012 03:32 AM, Gábor Lehel wrote:
>> There's a common pattern in Haskell of writing:
>> data E where E :: C a => a -> E
>> also written
>> data E = forall a. C a => E a
>> I recently uploaded a package to Hackage which uses the new
>> ConstraintKinds extension to factor this pattern out into an Exists
>> type parameterized on the constraint, and also for an Existential type
>> class which can encompass these kind of types:
>> My motivation was mostly to play with my new toys, if it turns out to
>> be useful for anything that's a happy and unexpected bonus.
>> Some interesting things I stumbled upon while writing it:
> - One of the advantages FunctionalDependencies has over TypeFamilies
>> is that type signatures using them tend to be more readable and
>> concise than ones which have to write out explicit equality
>> constraints. For example, foo :: MonadState s m => s -> m () is nicer
>> than foo :: (MonadState m, State m ~ s) => s -> m (). But with
>> equality superclass constraints (as of GHC 7.2), it's possible to
>> translate from TF-form to FD-form (but not the reverse, as far as I
>> know): class (MonadStateTF m, s ~ State m) => MonadStateFDish s m;
>> instance (MonadStateTF m, s ~ State m) => MonadStateFDish s m.
> Even better, you can write
> type ExistentialWith c e = (Existential e, c ~ ConstraintOf e)
> instead of
> class (Existential e, c ~ ConstraintOf e) => ExistentialWith c e
> instance (Existential e, c ~ ConstraintOf e) => ExistentialWith c e
> and drop UndecidableInstances.
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe