Note, if you want easy guarantees that both implementations implement the same 
functions, you can write yourself a bunch of forward declarations of the procs 
that should be defined and include those in the various files that provide the 
different implementations.
    
    
    #moduleInterface.nim
    proc x1(y: string)
    proc x2(y: int)
    
    #implementation1.nim
    include moduleInterface
    
    proc x1(y: string) = echo "Implementation1 x1"
    proc x2(y: int) = echo "Implementation1 x2"
    
    #implementation2.nim
    include moduleInterface
    
    proc x1(y: string) = echo "Implementation2 x1"
    proc x2(y: int) = echo "Implementation2 x2"
    
    
    #main.nim
    when defined(myFlag):
      import implementation1
    else:
      import implementation2
    
    
    Run

Note that this only works for procs, not for templates, iterators etc. so that 
could be an unwelcome limitation for that mechanism.

Reply via email to