code: func (c *Compiler) checkRecursion() {
  	eq := func(a, b util.T) bool {
  		return a.(*Rule) == b.(*Rule)
  	}
  
  	c.RuleTree.DepthFirst(func(node *TreeNode) bool {
  		for _, rule := range node.Values {
  			for node := rule.(*Rule); node != nil; node = node.Else {
  				c.checkSelfPath(node.Loc(), eq, node, node)
  			}
  		}
  		return false
  	})
  }
docs: // checkRecursion ensures that there are no recursive definitions, i.e., there are
  // no cycles in the Graph.