package ppx_tydi
Let expressions, inferring pattern type from expression.
Install
Dune Dependency
Authors
Maintainers
Sources
ppx_tydi-v0.16.0.tar.gz
sha256=a363153a1f58b35b789321dca9b5b03da46bc1c9152a38d307ffb338b3e25ac6
Description
Provides a ppx for [let%tydi]: type-directed [let] bindings. In [let%tydi a = b in ...], [a]'s type is inferred from [b] rather than the other way around. This is convenient for record patterns whose fields are not in scope.
Published: 02 Jun 2023
README
README.mdx
"ppx_tydi: concise type-directed dismabiguation of records in let-bindings" =========================================================================== `ppx_tydi` allows concise type-directed disambiguation of record patterns on the left-hand side of let-bindings: <!-- $MDX file=test/test.mlt,part=simple-good --> ```ocaml let () = let%tydi { foo } = r in ignore (foo : int) ;; ``` where an ordinary let-binding would give an error: <!-- $MDX file=test/test.mlt,part=simple-bad --> ```ocaml let () = let { foo } = r in ignore (foo : int) ;; [%%expect {| Line _, characters _-_: Error: Unbound record field foo |}] ``` `ppx_tydi` rewrites let-bindings to match statements, e.g. <!-- $MDX file=doc/generate-snippets-for-readme/before.ml --> ```ocaml let () = let%tydi (() as unit) = () in unit ;; ``` goes to <!-- $MDX file=doc/generate-snippets-for-readme/before.ml.pp --> ```ocaml let () = match () with | () as unit -> unit ``` `tydi` stands for "Type-directed" and is pronounced "Tidy". The problem is that the compiler cannot use the type of the expression on the right hand side to disambiguate the record pattern on the left. Let-bindings with record patterns are checked from left to right. Confusingly, let-bindings of variant patterns are fine. They get type-checked from right to left. This is an implementation detail related to type-checking of GADTs.
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page