Well, the DSL is more a language than a fixed structure. I gave a small sample code to feel it but you could have code like: dsl: algo1: evaluate: # Do something with algo1 result let x = getValue() algo2: # Using x to calculate algo2 init(x) evaluate: # Getting a new value let y = getValue() etc. Run
That's the reason why `dsl`, `algo1` and `algo2`, `evaluate` are macros in that example that can be combined by the user. `dsl` is used by the user to start using the DSL syntax. `algo1` and `algo2` are two keywords of the DSL to do some operations, and `evaluate` is another keyword to get access to result from these operations. Like I said, eventually the solution would be to change the DSL syntax, either by using dedicated `evaluate1` and `evaluate2`, but in the real DSL I could have more that 2 `algoN` and having a single keyword for a common action is more orthogonal. Or do you have a better idea?