Version française
Home     About     Download     Resources     Contact us    
Browse thread
Constructors are not functions
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jérémie Dimino <jeremie@d...>
Subject: Re: [Caml-list] Constructors are not functions
Le mardi 06 octobre 2009 à 14:01 +0200, Chantal KELLER a écrit :
> Dear Ocaml users,
> 
>   Is there a reason for constructors not to behave like functions? For
> instance, one cannot make a partial application from a constructor:
> 
> # type foo = | Bar of int;;
> type foo = Bar of int
> # let foobar = Bar in foobar 17;;
> Error: The constructor Bar expects 1 argument(s),
>        but is applied here to 0 argument(s)

This does not answer the question, but you can have function generated
automatically for constructors using camlp4.

I wrote some time ago an extension which add a type-conv type processor
"constructor", so you can write:

  type t = Foo of string | Bar of int * int
    with constructor

and it automatically generates these two functions:

  val foo : string -> t
  val bar : int -> int -> t

The extension is available here:
http://darcs.ocamlcore.org/cgi-bin/darcsweb.cgi?r=obus;a=headblob;f=/syntax/pa_constructor.ml

-- 
Jérémie