do you mean automatically try to match metadata? I guess there is an existing feature for sets which needs to be considered:
^{& ?rest-set} #{}
but that seems like a pretty low collision chance! 🙂
Argument for: Seems convenient, Argument against: Metadata is not considered in equality (is that important??? I don’t think so)
See also: https://github.com/noprompt/meander/issues/122#issuecomment-620983655
Hello! I'm playing with meander and am really impressed by it. I was wondering what would be the meander way to parse a regular clojure fn or
defn form ? (i'm struggling a bit in order to express elements that could be there or not (like the name of the lambda or the metadata map in the `defn for instance). thank you in advance.
Sorry for the late reply. I will hopefully be able to answer this thoroughly today. It is actually something that comes up quite often so, I plan on adding some examples to the cookbook. Optionality is a little difficult just because it is context sensitive. The easiest (but often times not scalable) answer is to make multiple patterns that match with or with out it. Like I said, I should have an example later today.
@pbaille Here is one way: https://github.com/timothypratley/justice/blob/master/src/justice/defn.cljc
FWIW If you compare it with the “spec driven approach” linked in the comment I think Meander is way more expressive 🙂
note that the way I emulated “optional” was to use a memory variable constrained to contain 1 or 0 elements
I wish Meander had a built in operator for optional (hint hint @noprompt)
@timothypratley The memory variable trick works too. I didn’t use it in the example. 🙂
I tried to hack on in one time. But the compiler depends on the length of a pattern quite often to be able to do things intelligently. I found myself running into trouble because of that.
Also as a side topic; you can use tools analyzer to parse/emit normalized versions then match with meander to remove most optionality (happy to share examples on that too if interesting).