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

Reply via email to