Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Idris States: Dependent types, not just for vectors?

Idris States: Dependent types, not just for vectors?

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

Tim McGilchrist

May 24, 2017
Tweet

More Decks by Tim McGilchrist

Other Decks in Programming

Transcript

  1. DEPENDENT TYPES, NOT JUST
    FOR VECTORS?
    FP-SYD 2017

    View Slide

  2. WHO AM I?
    ▸ Tim McGilchrist @lambda_foo
    ▸ Haskell programmer at Ambiata
    ▸ Curious about Distributed Systems
    ▸ Curious about Types

    View Slide

  3. BACKGROUND
    HOW DID I GET HERE?

    View Slide

  4. ACTORS AND ERLANG
    Mailbox
    Process

    View Slide

  5. SESSION TYPES
    ▸ Describe communication protocols
    ▸ Session types codify the structure of communication
    ▸ Data types codify the structures communicated

    View Slide

  6. PROBLEMS

    View Slide

  7. (X : TYPE) -> TYPE -> (X -> TYPE) -> TYPE
    EFFECT SYSTEMS
    ▸ Available in Idris and Purescript
    ▸ Use effects to model state machines.

    View Slide

  8. EFFECT PROBLEMS
    ▸ "it was not possible to implement one effectful API in
    terms of others" E Brady
    ▸ "difficult to describe the relationship between separate
    resources" E Brady
    ▸ Composing problems?

    View Slide

  9. IDRIS IS A
    PACMAN
    COMPLETE
    LANGUAGE
    Edwin Brady

    View Slide

  10. VECTOR LENGTH PROGRAMMING
    λΠ>:doc Vect
    Data type Data.Vect.Vect : (len : Nat) -> (elem : Type) -> Type
    Vectors: Generic lists with explicit length in the type
    Arguments:
    len : Nat -- the length of the list
    elem : Type -- the type of elements
    Constructors:
    Nil : Vect 0 elem
    Empty vector
    (::) : (x : elem) -> (xs : Vect len elem) -> Vect (S len) elem
    A non-empty vector of length S len, consisting of a head element and the rest of
    the list, of length len.

    View Slide

  11. PAPER
    STATES ALL THE WAY DOWN
    ▸ "A useful pattern in dependently
    typed programming is to define a
    state transition system”
    ▸ “an architecture for dependently
    typed applications”
    ▸ “How to implement a state
    transition system as a dependent
    type “
    ▸ "How to combine state transition
    systems into a larger system"

    View Slide

  12. GENERALISING STATEFUL PROGRAMS
    ▸ Types should capture the states of resources
    ▸ Stateful APIs should compose
    ▸ Types should be readable
    ▸ Error messages should be readable

    View Slide

  13. ENTER STRANS
    ▸ m - underlying monad
    ▸ ty - result type of the program
    ▸ in_ctxt - input context
    ▸ out_ctxt

    View Slide

  14. DATASTORE

    View Slide

  15. USING DATASTORE

    View Slide

  16. TEXT

    View Slide

  17. (.) : (B -> C) -> (A -> B) -> A -> C
    TYPES OF COMPOSITION
    ▸ Horizontally - multiple state machines within a function
    ▸ Vertically - implement state machine in terms of another
    Examples:
    Application on a Communication Protocol
    Multiple resources, File IO plus State

    View Slide

  18. STATE PLUS DATASTORE

    View Slide

  19. TEXT
    CLEANING UP THE TYPES
    ▸ Type level function ST
    ▸ List of actions on resources

    View Slide

  20. DATASTORE - CLEAN

    View Slide

  21. TEXT
    PRETTY ERRORS

    View Slide

  22. TEXT
    CONCLUSION
    ▸ Need to tie this back to Actors.
    ▸ Encoding State Machines.
    ▸ Session Types
    ▸ Effect Systems

    View Slide

  23. TEXT
    RESOURCES
    ▸ States All the Way Down, Edwin Brady
    ▸ Programming and Reasoning with Algebraic Effects and
    Dependent Types, Edwin Brady
    ▸ Session Types http://simonjf.com/2016/05/28/session-
    type-implementations.html
    ▸ Idris website http://docs.idris-lang.org/

    View Slide