···196196*/
197197```
198198199199+Furthermore, interpolations don't have to just be RegHex matchers. They can
200200+also be functions returning matchers or completely custom matching functions.
201201+This is useful when your DSL becomes _self-referential_, i.e. when one matchers
202202+start referencing each other forming a loop. To fix this we can create a
203203+function that returns our root matcher:
204204+205205+```js
206206+import match from 'reghex';
207207+208208+const value = match('value')`
209209+ (${/\w+/} | ${() => root})+
210210+`;
211211+212212+const root = match('root')`
213213+ ${/root/}+ ${value}
214214+`;
215215+```
216216+199217### Regex-like DSL
200218201219We've seen in the previous examples that matchers are authored using tagged