//! Module-owned record representations and their public operations. /// Number accessed through module operations. export opaque record Value: Copy { /// Stored number. number: u32, } /// Positional number wrapper. export opaque record Word: Copy(u32); /// Number borrowed for a region. export opaque record View: 'r + Copy { /// Borrowed number. number: &'r u32, } /// Construct a number. export fn create(number: u32) -> Value { return { number }; } /// Read the stored number. export fn (self: &Value) read() -> u32 { return self.number; } /// Add to the stored number. export fn (self: &mut Value) add(amount: u32) { set self.number += amount; } /// Read a number through a record pattern. export fn unpack(value: Value) -> u32 { let case Value { number } = value else panic; return number; } /// Construct a positional wrapper. export fn word(number: u32) -> Word { return Word(number); } /// Read a positional wrapper. export fn readWord(value: Word) -> u32 { return *value; } /// Wrap a regional borrow. export fn view 'r (number: &'r u32) -> View 'r { return View 'r { number }; } /// Read a regional wrapper. export fn readView 'r (value: &View 'r) -> u32 { return *value.number; }