module arch.system.state.resource_machine.notes.runnable;

import prelude open;

trait
type Runnable KVSKey KVSDatum Executable ProgramState :=
  mkRunnable@{
    executeStep
      : Executable
        -> ProgramState
        -> Pair KVSKey KVSDatum
        -> Result
          String
          (Pair ProgramState (List (Either KVSKey (Pair KVSKey KVSDatum))));
    halted : ProgramState -> Bool;
    startingState : ProgramState;
  };