type storage_t is timestamp type message_t is unit -> list (operation) type default_pt is unit type call_pt is message_t type contract_return_t is list (operation) * storage_t type entry_point_t is | Call of call_pt | Default of default_pt function call (const p : call_pt; const s : storage_t) : contract_return_t is block { if s >= now then failwith ("Contract is still time locked") else skip; const message : message_t = p; const ret_ops : list (operation) = message (unit) } with (ret_ops, s) function default (const p : default_pt; const s : storage_t) : contract_return_t is ((nil : list (operation)), s) function main(const param : entry_point_t; const s : storage_t) : contract_return_t is case param of Call (p) -> call (p,s) | Default (p) -> default (p,s) end