Skip to content

Conversation

@johnyob
Copy link
Contributor

@johnyob johnyob commented Oct 22, 2025

A syntax extension for Rust's matches! in OCaml 🐪

CHANGES:

Initial release

bug-reports: "https://github.com/johnyob/ppx-matches/issues"
depends: [
"ocaml" {>= "4.14.0"}
"dune" {>= "3.6" & >= "3.6"}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"dune" {>= "3.6" & >= "3.6"}
"dune" {>= "3.6"}

Minor nit. As I recall this is a known bug caused by dune's opam-file generation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

depends: [
"ocaml" {>= "4.14.0"}
"dune" {>= "3.6" & >= "3.6"}
"ppxlib"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"ppxlib"
"ppxlib" {>= "0.31.0"}

There are lower bounds failures, e.g.,on 5.0 when using ppxlib.0.25.1:

#=== ERROR while compiling ppx_matches.0.1.0 ==================================#
# context              2.4.1 | linux/x86_64 | ocaml-base-compiler.5.0.0 | pinned(https://github.com/johnyob/ppx-matches/releases/download/0.1.0/ppx_matches-0.1.0.tbz)
# path                 ~/.opam/5.0/.opam-switch/build/ppx_matches.0.1.0
# command              ~/.opam/opam-init/hooks/sandbox.sh build dune build -p ppx_matches -j 255 @install
# exit-code            1
# env-file             ~/.opam/log/ppx_matches-7-dcebaf.env
# output-file          ~/.opam/log/ppx_matches-7-dcebaf.out
### output ###
# (cd _build/default && /home/opam/.opam/5.0/bin/ocamlc.opt -w -40 -g -bin-annot -I src/.ppx_matches.objs/byte -I /home/opam/.opam/5.0/lib/base -I /home/opam/.opam/5.0/lib/base/base_internalhash_types -I /home/opam/.opam/5.0/lib/base/caml -I /home/opam/.opam/5.0/lib/base/md5 -I /home/opam/.opam/5.0/lib/base/shadow_stdlib -I /home/opam/.opam/5.0/lib/base_bigstring -I /home/opam/.opam/5.0/lib/base_quickcheck -I /home/opam/.opam/5.0/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.0/lib/bin_prot -I /home/opam/.opam/5.0/lib/bin_prot/shape -I /home/opam/.opam/5.0/lib/core -I /home/opam/.opam/5.0/lib/core/base_for_tests -I /home/opam/.opam/5.0/lib/core/validate -I /home/opam/.opam/5.0/lib/fieldslib -I /home/opam/.opam/5.0/lib/int_repr -I /home/opam/.opam/5.0/lib/jane-street-headers -I /home/opam/.opam/5.0/lib/ocaml-compiler-libs/common -I /home/opam/.opam/5.0/lib/ocaml-compiler-libs/shadow -I /home/opam/.opam/5.0/lib/ocaml/compiler-libs -I /home/opam/.opam/5.0/lib/parsexp -I /home/opam/.opam/5.0/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_derivers -I /home/opam/.opam/5.0/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_expect/collector -I /home/opam/.opam/5.0/lib/ppx_expect/common -I /home/opam/.opam/5.0/lib/ppx_expect/config -I /home/opam/.opam/5.0/lib/ppx_expect/config_types -I /home/opam/.opam/5.0/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_inline_test/config -I /home/opam/.opam/5.0/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_log/types -I /home/opam/.opam/5.0/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.0/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.0/lib/ppxlib -I /home/opam/.opam/5.0/lib/ppxlib/ast -I /home/opam/.opam/5.0/lib/ppxlib/astlib -I /home/opam/.opam/5.0/lib/ppxlib/print_diff -I /home/opam/.opam/5.0/lib/ppxlib/stdppx -I /home/opam/.opam/5.0/lib/ppxlib/traverse_builtins -I /home/opam/.opam/5.0/lib/sexplib -I /home/opam/.opam/5.0/lib/sexplib0 -I /home/opam/.opam/5.0/lib/splittable_random -I /home/opam/.opam/5.0/lib/stdio -I /home/opam/.opam/5.0/lib/stdlib-shims -I /home/opam/.opam/5.0/lib/time_now -I /home/opam/.opam/5.0/lib/typerep -I /home/opam/.opam/5.0/lib/variantslib -intf-suffix .ml -no-alias-deps -o src/.ppx_matches.objs/byte/ppx_matches.cmo -c -impl src/ppx_matches.pp.ml)
# File "src/ppx_matches.ml", line 20, characters 36-53:
# 20 |       Option.exists arg_pat ~f:(fun (_type_vars, pat) -> is_binding_pattern pat)
#                                          ^^^^^^^^^^^^^^^^^
# Error: This pattern matches values of type 'a * 'b
#        but a pattern was expected which matches values of type
#          Ppxlib.pattern = Astlib.Ast_412.Parsetree.pattern
# (cd _build/default && /home/opam/.opam/5.0/bin/ocamlopt.opt -w -40 -g -I src/.ppx_matches.objs/byte -I src/.ppx_matches.objs/native -I /home/opam/.opam/5.0/lib/base -I /home/opam/.opam/5.0/lib/base/base_internalhash_types -I /home/opam/.opam/5.0/lib/base/caml -I /home/opam/.opam/5.0/lib/base/md5 -I /home/opam/.opam/5.0/lib/base/shadow_stdlib -I /home/opam/.opam/5.0/lib/base_bigstring -I /home/opam/.opam/5.0/lib/base_quickcheck -I /home/opam/.opam/5.0/lib/base_quickcheck/ppx_quickcheck/runtime -I /home/opam/.opam/5.0/lib/bin_prot -I /home/opam/.opam/5.0/lib/bin_prot/shape -I /home/opam/.opam/5.0/lib/core -I /home/opam/.opam/5.0/lib/core/base_for_tests -I /home/opam/.opam/5.0/lib/core/validate -I /home/opam/.opam/5.0/lib/fieldslib -I /home/opam/.opam/5.0/lib/int_repr -I /home/opam/.opam/5.0/lib/jane-street-headers -I /home/opam/.opam/5.0/lib/ocaml-compiler-libs/common -I /home/opam/.opam/5.0/lib/ocaml-compiler-libs/shadow -I /home/opam/.opam/5.0/lib/ocaml/compiler-libs -I /home/opam/.opam/5.0/lib/parsexp -I /home/opam/.opam/5.0/lib/ppx_assert/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_bench/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_compare/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_derivers -I /home/opam/.opam/5.0/lib/ppx_enumerate/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_expect/collector -I /home/opam/.opam/5.0/lib/ppx_expect/common -I /home/opam/.opam/5.0/lib/ppx_expect/config -I /home/opam/.opam/5.0/lib/ppx_expect/config_types -I /home/opam/.opam/5.0/lib/ppx_hash/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_here/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_inline_test/config -I /home/opam/.opam/5.0/lib/ppx_inline_test/runtime-lib -I /home/opam/.opam/5.0/lib/ppx_log/types -I /home/opam/.opam/5.0/lib/ppx_module_timer/runtime -I /home/opam/.opam/5.0/lib/ppx_sexp_conv/runtime-lib -I /home/opam/.opam/5.0/lib/ppxlib -I /home/opam/.opam/5.0/lib/ppxlib/ast -I /home/opam/.opam/5.0/lib/ppxlib/astlib -I /home/opam/.opam/5.0/lib/ppxlib/print_diff -I /home/opam/.opam/5.0/lib/ppxlib/stdppx -I /home/opam/.opam/5.0/lib/ppxlib/traverse_builtins -I /home/opam/.opam/5.0/lib/sexplib -I /home/opam/.opam/5.0/lib/sexplib0 -I /home/opam/.opam/5.0/lib/splittable_random -I /home/opam/.opam/5.0/lib/stdio -I /home/opam/.opam/5.0/lib/stdlib-shims -I /home/opam/.opam/5.0/lib/time_now -I /home/opam/.opam/5.0/lib/typerep -I /home/opam/.opam/5.0/lib/variantslib -intf-suffix .ml -no-alias-deps -o src/.ppx_matches.objs/native/ppx_matches.cmx -c -impl src/ppx_matches.pp.ml)
# File "src/ppx_matches.ml", line 20, characters 36-53:
# 20 |       Option.exists arg_pat ~f:(fun (_type_vars, pat) -> is_binding_pattern pat)
#                                          ^^^^^^^^^^^^^^^^^
# Error: This pattern matches values of type 'a * 'b
#        but a pattern was expected which matches values of type
#          Ppxlib.pattern = Astlib.Ast_412.Parsetree.pattern

From the 5.1 lowerbounds workflow I can see ppxlib.0.31.0 works.

The bound is likely somewhere between ppxlib.0.25.1 and ppxlib.0.31.0, which you are very welcome to refine.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

@jmid jmid left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution!

Would you consider adding an x-maintenance-intent entry?
https://github.com/ocaml/opam-repository/blob/master/governance/policies/archiving.md

CHANGES:

Initial release
@johnyob johnyob force-pushed the release-ppx_matches-0.1.0 branch from 7d73e1f to 9edd659 Compare October 25, 2025 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants