ppx_curried_constrversion

ppx_curried_constr: ppx extension for curried constructors

Variant constructors as functions

Suppose we have:

type t = Foo of int * float

Then

Foo

is equal to fun (x,y) -> Foo (x,y). And,

!Foo

is equal to fun x y -> Foo (x,y).

Polymorphic variants as functions

!`Foo

is equivalent to

fun x -> `Foo x

Note that !`Foo always take only one argument: the arity of the polymorphic variant constructors is at most one and it is determined purely syntactically.

!`Foo (1,2,3)  (* `Foo (1,2,3) *)
!`Foo 1 2 3    (* (`Foo 1) 2 3  which ends in a type error *)

Code (`Foo) has no special meaning. It is just equivalent to `Foo.

How to build

$ omake
$ omake install

or opam install ppx_curried_constr.

How to use

$ ocamlfind ocamlc -package ppx_curried_constr ...

Samples

You can try examples at tests/test.ml:

$ ocaml -ppx src/ppx_curried_constr -c -i tests/test.ml

To check the output,

$ src/ppx_curried_constr -debug tests/test.ml

Limitations

No support of REPL (toplevel)

ppx_currired_constr is a "typeful PPX" which performs typing in it. It does not work with OCaml REPL (ocaml command), where ppx commands are called for each toplevel phrase without carrying over the type environment.

Do you use REPL? Personally, I use it only as a calculator.

Cons constructor

Cons constructor (::) is specially handled in OCaml and it is outside of the support of ppx_curried_constr.

AuthorJun Furuse
Published
Homepagehttp://bitbucket.org/camlspotter/ppx_curried_constr
Issue Trackerhttps://bitbucket.org/camlspotter/ppx_curried_constr/issues?status=new&status=open
Maintainerjun.furuse@gmail.com
Dependencies
Source [http] https://github.com/ocaml/opam-source-archives/raw/main/ppx_curried_constr-1.0.0.tar.gz
md5=5360d9f6c68056c66a46ccf9c680d4e1
Edithttps://github.com/ocaml/opam-repository/tree/master/packages/ppx_curried_constr/ppx_curried_constr.1.0.0/opam
No package is dependent