ok @wren here's my graph-search DSL: https://github.com/aplbrain/dotmotif/
I feel pretty comfortable with nearly all of the operator-overloading I'd have to do:
```
A -> B
```
becomes
```python
motif.A >> motif.B
```
But I don't have a good idea for how to render "A !> B". Thoughts?
Other syntax I support here: https://github.com/aplbrain/dotmotif/wiki/Getting-Started
And the language spec is here (extended backus-naur):
https://github.com/aplbrain/dotmotif/wiki/Language-Spec
@wren ooh sorry bb I was just thinking about a DSL spec, I haven't started yet! I like this, I don't love having to put parens around the expression but maybe it's not so bad, since it makes it pretty obvious that it's not a regular edge??
Maybe I'll try it and see how it feels — I do really like the idea of having errors in python-world instead of in parser-world
@wren but I would love to disallow this sort of collision — it shouldn't be permitted to write that motif without a compile error
@wren readability feels like a loser here, even though it's probably way [computationally]-cheaper to do the former than the latter
@j6m8
actually, scratch that: this requires that `Motif.__rshift__` returns something specific to the particular relation being defined, so `__invert__` knows what to invert - i think that's necessary in order to allow self-contradictory-but-syntactically-valid motifs like:
```
A>>B
~(A>>B)
```