[chuck-users] wishlist for the new year
Hans Aberg
haberg at math.su.se
Mon Jan 11 15:49:40 EST 2010
On 11 Jan 2010, at 19:19, mike clemow wrote:
> All I was saying originally, however, was that we should overload
> @=> to be able to reassign functions themselves to other references.
>
> fun void foo(int i)
> {
> <<< i >>>;
> }
>
> foo @=> fun void foo2;
>
> 1 => foo2; // prints 1
This is possible in SML. This can cause some unexpected code:
fun twice x = 2*x;
fun increment x = x + 1;
...
val twice = increment;
and now the function twice instead increments.
The code in Haskell is:
twice x = 2*x;
increment x = x + 1;
twice = increment;
and it produces this error in Hugs:
ERROR "Twice.hs":23 - "twice" multiply defined
even producing a joke. :-)
Haskell prohibits it because the renaming of functions seem dangerous
- it is not needed in programming, really.
Instead has a module system. In Haskell, it has to be in one file. One
writes:
module Twice (
<names to export (optional)>
)
where
<code>
Another file can then start with
module Another
where
import Twice
...
This module can then define its own function twice. One will then have
to disambiguate between the two names Another.twice and Twice.twice.
Hans
More information about the chuck-users
mailing list