[EMAIL PROTECTED] wrote:
> Philippa Cowderoy wrote:
>> For example, GADTs let you implement monads as interpreters by defining a
>> datatype representing the abstract syntax tree that describes a
>> computation - you can't get this to type without at a minimum existential
>> types and for many monad operations you need the full power of GADTs to
>> declare a corresponding constructor.
> 
> I'm yet to see the example of that need. I have seen the examples that
> the need for GADT was _claimed_ -- but then it turns out the example
> is implementable without GADT after all. Here are a few such
> examples: implementing State monad in a free term algebra
> 
>       Initial (term) algebra for a state monad
>       http://www.haskell.org/pipermail/haskell-cafe/2005-January/008241.html

Note that this argument can be extended to deny the need of any "sum of
products" construction. In other words, even declarations like

   data Color = Red | Green | Blue

can be implemented with typeclasses and without |. Thus, we don't need
them... :)

The other point is that using existentials for sums has a problem: I
think it's impossible to implement many functions that take multiple
arguments of the existential type. The example that comes to mind first is

 (==) :: Statte s a -> Statte s a -> Bool

How to implement this? (Besides the fact that it's impossible to
implement due to the fact that we'd need an equality on function types,
but let's use a different example whose constructors don't store
function types.)

Regards,
apfelmus

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to