Building state machines in our software is a common practice. They are used to model
all kinds of interesting and not so interesting problems like communication protocols,
user accounts and general business processes.
When we build these in a functional language like Haskell we get certain guarantees from
using ADTs, functions and the type system. What is harder is encoding checks and guarantees
around when state transitions are valid. In this talk we will look at how a depdendently typed
language (Idris) can build state machines with further guarantees and correctness.
This talk was inspired by reading Edwin Brady's paper \"State Machines all the way down\"
and much of the code is available at http://docs.idris-lang.org/en/latest/st/index.html