Sigh. I was just making it clear in the first instance that while what you said is related to Either, Either is safe. Relating it to a C union gives some good intuitions but without clarification makes it sound unsafe.
In the second instance I was hoping to find parameterised algebraic data types in a language older than Pascal to jokingly refute the idea that you need a modern language to get that. I hope we haven't reached a point where you don't understand me if I'm not directly arguing with you. :) On Wed, Oct 31, 2012 at 12:01 AM, Cédric Beust ♔ <[email protected]> wrote: > Again, I'm not sure what you are trying to achieve here. I just offered a > funny piece of hackdom from thirty years ago but you seem to want to turn > this into a language war? > > -- > Cédric > > > > > On Tue, Oct 30, 2012 at 7:56 PM, Ricky Clarkson <[email protected]> > wrote: >> >> datatype 'a 'b either = >> Left of 'a >> | Right of 'b >> >> ML, 1973. Pascal is only 3 years older, but much much sillier. >> >> On Tue, Oct 30, 2012 at 11:39 PM, Cédric Beust ♔ <[email protected]> wrote: >> > I hope you're not suggesting that I was contrasting the quality of a >> > piece >> > of code that's forty years old with one written in a modern programming >> > language... >> > >> > -- >> > Cédric >> > >> > >> > >> > >> > On Tue, Oct 30, 2012 at 7:34 PM, Ricky Clarkson >> > <[email protected]> >> > wrote: >> >> >> >> The difference being that your Pascal example has no notion of one >> >> side being the real side, hence it being useful for subverting the >> >> type system, and an Either has that defined and doesn't allow any >> >> subversion, but lets you abstract over it being one thing or the >> >> other. In C it can be used for 'evil' too but a common approach is to >> >> have a tag saying what the type really is. >> >> >> >> On Tue, Oct 30, 2012 at 11:25 PM, Cédric Beust ♔ <[email protected]> >> >> wrote: >> >> > Bouncing off another topic mentioned in the latest podcast: union >> >> > types. >> >> > Yes, C had them but the first time I was exposed to them was in >> >> > Pascal, >> >> > and >> >> > the discussion on the podcast reminded me of an awesome hack that >> >> > blew >> >> > my >> >> > mind a very long time ago. >> >> > >> >> > Pascal was well known to be very strict and safe. Among other things, >> >> > it >> >> > didn't let you access the memory directly, which was a big deal in >> >> > the 8 >> >> > bit >> >> > era where memory protection was a distant dream and PEEK and POKE >> >> > were >> >> > how >> >> > you wrote games. >> >> > >> >> > And then, one day, somebody found a way to address the memory using >> >> > standard >> >> > Pascal. Here is the trick (from memory, so it's probably not quite >> >> > correct): >> >> > >> >> > type >> >> > b = record >> >> > x : array[1..65536] of ^integer; >> >> > y : integer; >> >> > end; >> >> > >> >> > This declares a union type that is made of either an array of 65k >> >> > pointers >> >> > to integers or a single integer. Then you initialize this record in >> >> > its >> >> > "x" >> >> > side with the memory address you want to peek and you access it by >> >> > using >> >> > the >> >> > "x" side of the record. >> >> > >> >> > It took me months to understand what this code did, but what a >> >> > revelation it >> >> > was when it finally clicked... >> >> > >> >> > By the way, these types are formally known as "sum types" (Either is >> >> > one >> >> > of >> >> > them). >> >> > >> >> > -- >> >> > Cédric >> >> > >> >> > >> >> > -- >> >> > You received this message because you are subscribed to the Google >> >> > Groups >> >> > "Java Posse" group. >> >> > To post to this group, send email to [email protected]. >> >> > To unsubscribe from this group, send email to >> >> > [email protected]. >> >> > For more options, visit this group at >> >> > http://groups.google.com/group/javaposse?hl=en. >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups >> >> "Java Posse" group. >> >> To post to this group, send email to [email protected]. >> >> To unsubscribe from this group, send email to >> >> [email protected]. >> >> For more options, visit this group at >> >> http://groups.google.com/group/javaposse?hl=en. >> >> >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "Java Posse" group. >> > To post to this group, send email to [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]. >> > For more options, visit this group at >> > http://groups.google.com/group/javaposse?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Java Posse" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/javaposse?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Java Posse" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/javaposse?hl=en. -- You received this message because you are subscribed to the Google Groups "Java Posse" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
