Let's say I have this module mymod.nim that's using the tables module:
# mymod.nim
import tables
type
Thing* = object
name*: string
stuff*: Table[int, string]
proc newThing* (): Thing =
result.stuff = initTable[int, string]()
Now I try to use this **Thing** type in another file like this:
import mymod
var t: Thing = newThing()
t.name = "cool"
t.stuff[0] = "foobazz"
t.stuff[1] = "foobarrsy"
echo t
When I do this I get the following error:
test.nim(6, 8) Error: type mismatch: got (Table[system.int, system.string],
int literal(0), string)
but expected one of:
proc `[]=`[I: Ordinal, T, S](a: T; i: I; x: S)
proc `[]=`[Idx, T](a: var array[Idx, T]; x: Slice[Idx]; b: openArray[T])
proc `[]=`(s: var string; x: Slice[int]; b: string)
proc `[]=`[T](s: var seq[T]; x: Slice[int]; b: openArray[T])
proc `[]=`[Idx, T](a: var array[Idx, T]; x: Slice[int]; b: openArray[T])
Now, if I go ahead and 'import tables' along with 'import mymod' then it works
just fine:
import mymod
import tables # add this
var t: Thing = newThing()
t.name = "cool"
t.stuff[0] = "foobazz"
t.stuff[1] = "foobarrsy"
echo t # compiles and runs just fine now
I was surprised by this. I guess I naively thought that since mymod imports
tables, that any users of mymod would automatically have what they need in
order for things to work. I think I'm fundamentally misunderstanding the module
system. Any hints are greatly appreciated.