type MyEvent = Event1 | Event2 | Event3
type MachineState<'event when 'event:comparison> =
Transitions: Map<'event, Lazy<MachineState<'event>>>
static member Default = {Transitions=Map.empty;Data=0}
let on event endState state =
{state with Transitions = state.Transitions.Add(event, endState)}
let withData data state =
let transition event (state: MachineState<_>) =
match state.Transitions.TryFind event with
lazy (MachineState<_>.Default
lazy (MachineState<_>.Default
lazy (MachineState<_>.Default
printfn "Current Data: %d" m.Data; m
let initialState = StateA.Value