If you're only ever directly naming the function names in `passFun`, this works:
    
    
    import std/macros
    
    proc square[T](data: T): T =
      return data*data
    
    proc cube[T](data: T): T =
      return data*data*data
    
    proc halve[T](data: T): T =
      return data / 2
    
    macro passFun(fun, data: untyped): untyped =
      assert fun.repr in ["square", "cube"]
      result = quote do:
        `fun`(`data`)
    
    echo "pass the square function: ", passFun(square, 2.0)
    echo "pass the cube function: ", passFun(cube, 2.0)
    #echo "pass the error function: ", passFun(halve, 2.0)
    
    
    Run

Reply via email to