Hello Timothy GADTs let you catch more errors at compile time. With them you can give different types to constructors of the same datatype.
regards paolino 2012/8/31 <[email protected]> > Sure, but that's relying on the promise that you're passing it a valid > BadFrog... Consider then: > > > deBadFrog $ BadFrogType (BadBar { badFoo = 1}) > > > ---------- Původní zpráva ---------- > Od: John Wiegley <[email protected]> > Datum: 31. 8. 2012 > Předmět: Re: [Haskell-cafe] Over general types are too easy to make. > > >>>>> <[email protected]> writes: > > >> data BadFoo = > >> BadBar{ > >> badFoo::Int} | > >> BadFrog{ > >> badFrog::String, > >> badChicken::Int} > > > This is fine, until we want to write a function that acts on Frogs but > not > > on Bars. The best we can do is throw a runtime error when passed a Bar > and > > not a Foo: > > You can use wrapper types to solve this: > > data BadBarType = BadBarType BadFoo > data BadFrogType = BadFrogType BadFoo > > Now you can have: > > deBadFrog :: BadFrogType -> String > > And call it as: > > deBadFrog $ BadFrogType (BadFrog { badFrog = "Hey", badChicken = 1}) > > Needless to say, you will have to create helper functions for creating Bars > and Frogs, and not allow your BadBar or BadFrog value constructors to be > visible outside your module. > > John > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
