I've been fighting a confusing compile time error while refactoring a larger 
project based on arraymancer to use generics, I've then reduced it to a small 
example.

The very same code compiles when included (or copy-pasted in caller scope), but 
doesn't when imported.

barmod.nim
    
    
    import arraymancer
    
    proc bar*[V]() =
      discard newTensor[float32](0).asType(V)
    
    
    Run

main.nim
    
    
    when true:
      import barmod
      # compile error
      # Error: undeclared identifier: 'newTensor'
    else:
      # compiles successfully
      include barmod
    
    bar[int]()
    
    
    Run

I know this is related to declarations available at [macro 
callsite](https://github.com/mratsim/Arraymancer/blob/7d6d21cbcafda25201f4fd2fb481fb1316704813/src/arraymancer/tensor/ufunc.nim#L28),
 and I've checked that `newTensor` is not available there, but why is it 
working when calling proc is included and not imported?

Would you please explain me what is happening here?

`asType` proc is 
[here](https://github.com/mratsim/Arraymancer/blob/7d6d21cbcafda25201f4fd2fb481fb1316704813/src/arraymancer/tensor/ufunc.nim#L22)

`Error: undeclared identifier: 'newTensor'` happens 
[here](https://github.com/mratsim/Arraymancer/blob/7d6d21cbcafda25201f4fd2fb481fb1316704813/src/arraymancer/tensor/private/p_empty_tensors.nim#L46)

Thanks

Reply via email to