[Haskell-cafe] Lambda and closures in PHP -- could someone please comment?

Jonathan Cast jonathanccast at fastmail.fm
Wed Jun 18 03:11:19 EDT 2008

On Wed, 2008-06-18 at 06:36 +0200, Karoly Negyesi wrote:
> >  (a) I would *never* want to use an implementation of closures like that.
> >  (b) Closures as proposed are *far* better than not having closures.
> Could you elaborate on a) ?

I dislike the habit of implicit declaration --- strongly --- and the
consequent need for the lexical keyword (although at this point PHP's
stuck with it).  I can see myself forgetting to use lexical far more
often than accidentally leaving off a `my' in Perl I should have used (I
hardly ever shadow variable names anyway, so if I forget `my' is usually
a use strict 'vars' error).

I dislike curly braces.  Syntax that extends as far to the right as
possible tends to end up with fewer delimiters and a cleaner appearance.
It's basically a way to replace a bunch of closing braces with a
single ) or (in Haskell, implicit) ;

lintPat p0 $ \ ty0 -> lintPat p1 $ \ ty1 -> lint e


lintPat($p0, sub { my ($ty0) = @_; lintPat($p1, sub { my ($ty1) = @_;
lint($e) })})

Four closing delimiters seems excessive.

Nit: `function' is verbose.  ML uses fun or fn (I forget which and am
too lazy to google).  Perl's regular keyword is sub, so they use that.

There are worse fates than duck typing (C++ comes to mind :), and given
a language with neither lexical closures/anonymous functions nor HM
typing, I'd complain about the lack of lambdas first.  But, still, no HM
means no type classes.  That ultimately becomes limiting.  (I still
haven't seen a decent implementation of monads in a dynamically typed
language).  But PHP is probably pretty much stuck with it.

Not to criticize, mind you --- the proposal looks excellent for what it
does.  But I like what Haskell does worlds better.


More information about the Haskell-Cafe mailing list