Id[T] = object
proc entityId[T](id: Id[T]): EntityId
proc `of`[T](id: EntityId; desc: typedesc[T]): Id[T]
proc `of`[T](id: Id[auto]; desc: typedesc[T]): Id[T]
template components[T: tuple](world: var World; id: Id[T]): auto
template has[T](world: var World; id: Id[T]): bool
template read[T: tuple](world: var World; id: Id[T]): T
template read[T](world: var World; id: Id[T]): T
template remove[T: tuple](world: var World; id: Id[T]; mode: OperationMode = Deferred)
template remove[T](world: var World; id: Id[T]; mode: OperationMode = Deferred)
template write[T](world: var World; id: Id[T]): var T