Lightweight Monadic Programming in ML
Lightweight Monadic Programming in ML Nikhil Swamy? Nataliya Gutsy Daan Leijen? Michael Hicksy ?Microsoft Research, Redmond yUniversity of Maryland, College Park Abstract ing [26]. In a monadic type system, if values are given type τ then Many useful programming constructions can be expressed as mon- computations are given type m τ for some monad constructor m. ads. Examples include probabilistic modeling, functional reactive For example, an expression of type IO τ in Haskell represents programming, parsing, and information flow tracking, not to men- a computation that will produce (if it terminates) a value of type tion effectful functionality like state and I/O. In this paper, we τ but may perform effectful operations in the process. Haskell’s present a type-based rewriting algorithm to make programming Monad type class, which requires the bind and unit operations with arbitrary monads as easy as using ML’s built-in support for given above, is blessed with special syntax, the do notation, for state and I/O. Developers write programs using monadic values programming with instances of this class. of type m τ as if they were of type τ, and our algorithm inserts Moggi [22], Filinksi [11], and others have noted that ML pro- the necessary binds, units, and monad-to-monad morphisms so that grams, which are impure and observe a deterministic, call-by-value evaluation order, are inherently monadic. For example, the value the program type checks. Our algorithm, based on Jones’ qualified 0 types, produces principal types. But principal types are sometimes λx.e can be viewed as having type τ ! m τ : the argument problematic: the program’s semantics could depend on the choice type τ is never monadic because x is always bound to a value in of instantiation when more than one instantiation is valid.
[Show full text]