Function types as classes

Mark Reinhold mr at sun.com
Thu Dec 10 21:54:32 PST 2009


> Date: Thu, 10 Dec 2009 23:39:30 +0100
> From: Patrick Wright <pdoubleya at gmail.com>

> Should I assume in reading the Staw Man Proposal (SMP) that when I
> read "function type" I should understand that to be some Class, and we
> assign instances of that function type?

Whether a function type is actually a Class is an open question, I think,
although I suspect that's where we'll end up.  Whatever they are, it must
be possible to declare variables of function type, and assign functions
to them.

>                                         If so:
> 
> #int() fortyTwo = #()(42);
> #int() fortyTwoTwo = #()(42);
> 
> assert !(fortyTwo == fortyTwoTwo)

Right.

> but what about
> assert (fortyTwo.equals(fortyTwoTwo))
> 
> which maybe is a way of asking, is any #int() equal to any other
> #int()? What about hashCode()?

Closure equality should be object identity, and closure hash codes should
be identity hash codes.

(Well, I suppose we could consider two closures to be equal if they refer
 to the same bytecode and if their saved lexical bindings are all .equals,
 but I don't really see the point.  This is never something that any Lisp
 has done, so far as I know.)

- Mark


More information about the lambda-dev mailing list