Krishnaswami, Neel

2001-07-30 18:51:07 UTC

Hello,

I'm curious as to the reason why I can't use a datatype constructor

as a function. Eg, in SML I can write a function like this:

datatype peano = Zero | Succ of peano

fun fold succ zero n =

case n of

Zero => zero

| (Succ n') => succ (fold n')

fun add a b = fold Succ a b (* Use the Succ constructor as a funtion *)

If I try something similar in Caml,

type peano = Zero | Succ of peano

let rec fold succ zero n =

match n with

| Zero -> zero

| Succ(n') -> succ (fold succ zero n')

I can't write an add function like I can in SML:

# let add a b = fold (Succ) a b;;

Characters 20-24:

The constructor Succ expects 1 argument(s),

but is here applied to 0 argument(s)

Instead I need to wrap it in a function:

# let add a b = fold (fun x -> Succ x) a b

val add : peano -> peano -> peano = <fun>

Why was this design choice made?

--

Neel Krishnaswami

***@cswcasa.com

-------------------

Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/

To unsubscribe, mail caml-list-***@inria.fr Archives: http://caml.inria.fr

I'm curious as to the reason why I can't use a datatype constructor

as a function. Eg, in SML I can write a function like this:

datatype peano = Zero | Succ of peano

fun fold succ zero n =

case n of

Zero => zero

| (Succ n') => succ (fold n')

fun add a b = fold Succ a b (* Use the Succ constructor as a funtion *)

If I try something similar in Caml,

type peano = Zero | Succ of peano

let rec fold succ zero n =

match n with

| Zero -> zero

| Succ(n') -> succ (fold succ zero n')

I can't write an add function like I can in SML:

# let add a b = fold (Succ) a b;;

Characters 20-24:

The constructor Succ expects 1 argument(s),

but is here applied to 0 argument(s)

Instead I need to wrap it in a function:

# let add a b = fold (fun x -> Succ x) a b

val add : peano -> peano -> peano = <fun>

Why was this design choice made?

--

Neel Krishnaswami

***@cswcasa.com

-------------------

Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/

To unsubscribe, mail caml-list-***@inria.fr Archives: http://caml.inria.fr