Open3
Nimの型クラスの小ネタ
型クラス:型に別名を付けられる
type Number = int or float # int | float でも可
直和型の変数は、一度どちらかの型にするとその型の変数として振る舞う
type TypeClass = int | string
var foo: TypeClass = 1
foo = 2 # OK
foo = "bar" # int型として振る舞うためerror
組み込みの型と型クラスは、ジェネリクスの型制約に使える
proc onlyIntOrStr[T: int | string](x, y: T) = discard
onlyIntOrStr(1, 2) # OK
onlyIntOrStr(1.0, 2) # error
onlyIntOrStr(1, "2") # 同時に複数の型として振る舞えないのでerror