[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
vs
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.
jcc
More information about the Haskell-Cafe
mailing list