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
.
Author | Jun Furuse |
---|---|
Published | |
Homepage | http://bitbucket.org/camlspotter/ppx_curried_constr |
Issue Tracker | https://bitbucket.org/camlspotter/ppx_curried_constr/issues?status=new&status=open |
Maintainer | jun.furuse@gmail.com |
Dependencies | |
Source [http] | https://github.com/ocaml/opam-source-archives/raw/main/ppx_curried_constr-1.0.0.tar.gz sha256=5fe5a392274824871c3e159c5f7eb524a0716e86a952a43b45cf0a69edf2853e md5=5360d9f6c68056c66a46ccf9c680d4e1 |
Edit | https://github.com/ocaml/opam-repository/tree/master/packages/ppx_curried_constr/ppx_curried_constr.1.0.0/opam |