On Apr 15, 2010, at 3:44 PM, Sittampalam, Ganesh wrote:

You were trying to choose between different top-level types (which
happen to be instances of the same family) by their constructors.

That is true. I was trying to emulate an open data type such that I can write

    -- does not work
    fffuuuu :: DataFam a -> a -> Int
    fffuuuu BoolDataFam True = 42
    fffuuuu CharDataFam 'c'  = 43

But apparently such thing is only possible with a (closed) GADT:

    data GADT a where
      BoolGADT :: GADT Bool
      CharGADT :: GADT Char

    -- does work
    foo :: GADT a -> a -> Int
    foo BoolGADT True = 42
    foo CharGADT 'c'  = 43

I was hoping to achieve the same without having a single closed type.

On Apr 15, 2010, at 3:29 PM, Dan Doel wrote:

DataFam Bool is not a GADT, it's an ADT written with GADT syntax.

Yes, that was the main source of my confusion.

Thank you both for clarifying!

Sebastian


--
Underestimating the novelty of the future is a time-honored tradition.
(D.G.)



_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to