package ppx_optional
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=809acb833048508f48c74422a5f74e4ef621807376eb5753b98bbd8f3df409bc
doc/README.html
ppx_optional - match statements for zero-alloc options
A ppx rewriter that rewrites simple match statements with an if then else expression.
Syntax
ppx_optional rewrites the extension match%optional in expressions. It requires that a module Optional_syntax is in scope, and that it has is_none and unsafe_value values.
For instance:
match%optional e with
| None -> none_expression
| Some x -> some_expressionbecomes:
if Optional_syntax.is_none e then begin
none_expression
end else begin
let x = Optional_syntax.unsafe_value e in
some_expression
endAnother example with multiple values and inline getting Optional_syntax in scope:
match%optional.Price_float.Option a, b with
| None, None -> expression_a
| Some a, None -> expression_b
| None, Some b -> expression_c
| Some a, Some b -> expression_dIf any of the expressions to be matched are unboxed, you will need to use %optional_u instead. This works just as well as %optional (and could be used everywhere, safely), but gives worse error messages in the case of an incomplete pattern match. If you observe other differences between %optional and %optional_u (for example, behavior around merlin queries), please report bugs to maintainers.
Usage
This is normally used to safely access an optional value while avoiding allocation for immediate values (e.g. Immediate.{Char,Bool,Int}.Option, Fixed.Option, Price.Fixed.Option, etc...).