type storage = int (* variant defining pseudo multi-entrypoint actions *) type action = Increment of int | Decrement of int let add (a: int) (b: int) : int = a + b let sub (a: int) (b: int) : int = a - b (* real entrypoint that re-routes the flow based on the action provided *) let main (p: action) storage = let storage = match p with Increment n -> add storage n | Decrement n -> sub storage n in ([] : operation list), storage