Fork me on GitHub
#meander
<
2020-05-02
>
pbaille06:05:52

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.

Jimmy Miller15:05:50

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.

timothypratley19:05:49

FWIW If you compare it with the “spec driven approach” linked in the comment I think Meander is way more expressive 🙂

timothypratley19:05:37

note that the way I emulated “optional” was to use a memory variable constrained to contain 1 or 0 elements

timothypratley19:05:54

I wish Meander had a built in operator for optional (hint hint @U06MDAPTP)

noprompt19:05:27

@U06S1EJPL The memory variable trick works too. I didn’t use it in the example. 🙂

Jimmy Miller19:05:53

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.

timothypratley19:05:08

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).

👍 4