[Haskell-cafe] Functions are first class values in C
Philippa Cowderoy
flippa at flippac.org
Sat Dec 22 10:13:55 EST 2007
On Sat, 22 Dec 2007, Cristian Baboi wrote:
> On Sat, 22 Dec 2007 16:55:08 +0200, Miguel Mitrofanov
> <miguelimo38 at yandex.ru> wrote:
>
> > > > > In Haskell I cannot pass a function to a function, only its
> > > > > expansion.
> > >
> > > > What do you mean by "expansion"? Can you clarify this?
> > >
> > > f1=\x->x+1
> > > f2=\x->2*x
> > > g=\x->x.f1
> > > h=\x->x.(\x->x+1)
> > >
> > > h is g
> >
> > Not clear. Try starting with "function's expansion is..."
>
>
> function's expansion is ... just like macro expansion.
No, it's not. Expanding variables (swapping f1 for \x->x+1) isn't the
evaluation mechanism in haskell, g and h really are semantically
equivalent values and we can't do actual computation just by expanding
variables. Whereas expanding a macro is equivalent to beta-reduction
(evaluating a function application), which isn't required before passing
something in Haskell. We pass functions, not just their results.
Here's a trivial example that does so:
(\x -> x) (\x -> x)
A lambda calculus classic that doesn't typecheck in Haskell:
(\x -> x x) (\x -> x x)
Feel free to try evaluating it!
--
flippa at flippac.org
"I think you mean Philippa. I believe Phillipa is the one from an
alternate universe, who has a beard and programs in BASIC, using only
gotos for control flow." -- Anton van Straaten on Lambda the Ultimate
More information about the Haskell-Cafe
mailing list