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.

Reply via email to