News for hackers. Stuff that matters.
Re:Algebraic Data Types by taejo on Thursday July 31, 2014 @12:33PM (#8115084)
C already has product types, so it's sums that are more interesting, and indeed the destructors for sums are harder in C. The constructors

    in1 : a -> Sum a b
    in2 : b -> Sum a b
are no problem, but the destructor

    sum : Sum a b -> (a -> c) -> (b -> c) -> c
needs first-class functions.
Re:Algebraic Data Types by tel on Thursday July 31, 2014 @02:13PM (#8115909)
There's a difference between "having a destructor" and having a first-class representation of it. For instance, basically every language has a destructor for booleans—it's just if.

The trick is that unless you have first-class functions you probably cannot reify such a destructor. It always just lives in your syntax.

On the flip side, that's really what it means for a language to, say, lack sum types. It's not that the language doesn't have the ability to have choice, it's that it lacks the ability to represent choice in data. In other words, you probably can eliminate choice using if/switch/case/what-have-you but you can't construct it.

Re:Algebraic Data Types by taejo on Thursday July 31, 2014 @07:03PM (#8117508)
Right. I interpreted your previous comment as meaning that you don't need pattern matching because you can just used the (reified) destructor. Conversely, you can avoid the higher-order destructor using pattern matching.
Re:Algebraic Data Types by tel on Friday August 01, 2014 @05:09PM (#8122817)
Yep! They are "the same".
Re:Algebraic Data Types by dllthomas on Thursday July 31, 2014 @01:06PM (#8115373)
C already has sum types, just slightly sloppy ones (as unions aren't required to have a tag).