also why not use OOP?
    
    
    type
      Node = ref object of RootObj
      BinaryOpr = ref object of Node
        a, b: Node
      UnaryOpr = ref object of Node
        a: Node
      Variable = ref object of Node
        value: string
      Value = ref object of Node
        value: int
    method traverse(n: Node) {.base} = discard
    method traverse(n: Variable) = echo n.value
    method traverse(n: Value) = echo n.value
    method traverse(n: BinaryOpr) =
      traverse n.a
      traverse n.b
    method traverse(n: UnaryOpr) =
      traverse n.a
    
    traverse BinaryOpr(
      a: UnaryOpr(a: Variable(value: "hello")),
      b: BinaryOpr(
        a: Variable(value: "two"),
        b: Value(value: 10)))
    
    
    Run

Reply via email to