-- Abstract class. class eatable function eat() end -- override in child class end class foodbox extends eatable private contents function __construct(contents) if !contents:checkall(|c| -> c instanceof eatable) then error("All foodbox elements must be eatable.") end self.contents = contents end function getContents() return self.contents end end -- Inherits from eatable and overrides eat() method. class pie extends eatable function __construct(private filling) end function eat() print($"{self.filling} pie, yum!") end end -- Not an eatable class bicycle end local items = {new pie("Apple"), new pie("Gooseberry")} local fb = new foodbox(items) fb:getContents():foreach(|item| -> item:eat()) print() items:insert(new bicycle()) fb = new foodbox(items) -- throws an error because bicycle not eatable