Pool[T] = ptr PoolObj[T]
proc borrow[T](pool: Pool[T]): T {....raises: [], gcsafe.}
proc close[T](pool: Pool[T]) {....raises: [].}
proc delete[T](pool: Pool[T]; entry: T) {....raises: [], gcsafe.}
proc newPool[T](): Pool[T]
proc recycle[T](pool: Pool[T]; t: T) {....raises: [], gcsafe.}
iterator items[T](pool: Pool[T]): T