Reusable state machine concepts.
This type is used as a marker to annotate the type of a State with a set of states that it can legally transition into.
State captures the type of a state with its type annotated with the states that it can transition into as a phantom type, and the data model that the state has as a concrete part of the state model.
map : (a -> b) -> State tag a -> State tag b
Maps a function over the model within a State.
untag : State tag value -> value
Unboxes the model from within a State.