let exp = [%expr (a, b)]
let pat = ? exp
There is no general way to convert an expression into a pattern (eg what would be the pattern corresponding to 1 + 1
?). Of course, some expression do correspond to patterns; you can try writing a function Parsetree.expression -> Parsetree.pattern
that fails on those expressions that do not correspond to a pattern, but as far as I know there isn’t anything already available in ppxlib
.
I bet I need a Parsetree.expression -> Parsetree.pattern option
…
What are you trying to do? There might be a way to do this without converting an arbitrary pattern into an expression.
Thanks a lot for this concern!
However, it’s exactly what I want… I mean it’s almost my direct use.
I want to convert a binop b; c
into
proceed b @@ function
| a -> c
| x -> fail x
where binop
is an infix operator.
Monad is an instance(when proceed = bind), and in this case what I want to do will get specialized to do-notations:
b := a
c := f b
h g
->
bind a @@ fun b ->
bind (f b) @@ fun c ->
h g