package ppx_curried_constr
- Overview
- No Docs
You can search for identifiers within the package.
in-package search v0.2.0
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=5fe5a392274824871c3e159c5f7eb524a0716e86a952a43b45cf0a69edf2853e
md5=5360d9f6c68056c66a46ccf9c680d4e1
Description
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
.