Abstract
Functional logic programming and probabilistic programming have demonstrated the broad benefits of combining laziness (non-strict evaluation with sharing of the results) with non-determinism. Yet these benefits are seldom enjoyed in functional programming, because the existing features for non-strictness, sharing, and nondeterminism in functional languages are tricky to combine. We present a practical way to write purely functional lazy non-deterministic programs that are efficient and perspicuous. We achieve this goal by embedding the programs into existing languages (such as Haskell, SML, and OCaml) with high-quality implementations, by making choices lazily and representing data with non-deterministic components, by working with custom monadic data types and search strategies, and by providing equational laws for the programmer to reason about their code.
Original language | English |
---|---|
Pages (from-to) | 11-22 |
Number of pages | 12 |
Journal | ACM SIGPLAN Notices |
Volume | 44 |
Issue number | 9 |
DOIs | |
Publication status | Published - 2009 Sept |
Keywords
- Call-time choice
- Continuations
- Monads
- Side effects