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