Skip to content

Instantly share code, notes, and snippets.

@brainrake
Last active January 31, 2017 10:58
Show Gist options
  • Save brainrake/631a77a5102249adb0cb26ab4ec4e556 to your computer and use it in GitHub Desktop.
Save brainrake/631a77a5102249adb0cb26ab4ec4e556 to your computer and use it in GitHub Desktop.
simple type-level state machine in elm. invalid tra
module Machine exposing (..)
type DoorState = Opened | Closed
type ClosedDoor = ClosedDoor DoorState
type OpenedDoor = OpenedDoor DoorState
closed : ClosedDoor
closed = ClosedDoor Closed
opened : OpenedDoor
opened = OpenedDoor Opened
close : OpenedDoor -> ClosedDoor
close opened_door = closed
open : ClosedDoor -> OpenedDoor
open closed_door = opened
sequence : ClosedDoor -> ClosedDoor
sequence = open >> close >> open >> close
test : ClosedDoor
test = sequence closed
-- bad = closed |> close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment