include "lock.m"; lock := load Lock Lock->PATH; Semaphore: adt { c: chan of int; obtain: fn(s: self ref Semaphore); release: fn(s: self ref Semaphore); new: fn(): ref Semaphore; }; init: fn();