Skip to main content
    • Aa
    • Aa

Monadic constraint programming


A constraint programming system combines two essential components: a constraint solver and a search engine. The constraint solver reasons about satisfiability of conjunctions of constraints, and the search engine controls the search for solutions by iteratively exploring a disjunctive search tree defined by the constraint program. In this paper we give a monadic definition of constraint programming in which the solver is defined as a monad threaded through the monadic search tree. We are then able to define search and search strategies as first-class objects that can themselves be built or extended by composable search transformers. Search transformers give a powerful and unifying approach to viewing search in constraint programming, and the resulting constraint programming system is first class and extremely flexible.

Hide All
Apt K R., Brunekreef J., Partington V. & Schaerf A. (1998) Alma-o: An imperative language that supports declarative programming, ACM Trans. Program. Lang. Syst. 20 (5): 10141066.
Barnier N. (Dec. 2002) Application de la programmation par contraintes à des problmes de gestion du trafic aérien, PhD thesis [online]. Toulouse, France: Institut National Polytechnique de Toulouse. Available at: Last accessed 3 August 2009.
Bird R. S. (2006) A program to solve Sudoku, Journal of Functional Programming 16 (6): 671679.
Brassel B. & Huch F. (2007) On a tighter integration of Functional and Logic Programming. In The 5th Asian Symposium on Programming Languages and Systems (APLAS'07), Zhong Shao (ed), Lecture Notes in Computer Science, vol. 4807. Springer, Berlin/Heidelberg, pp. 122138.
Casas A., Cabeza D., & Hermenegildo M. V. (2006) A syntactic approach to combining functional notation, lazy evaluation and higher-order in LP systems. In The 8th International Symposium on Functional and Logic Programming (FLOPS'06), Hagiya Masami and Wadler Philip (eds.), Springer, Berlin/Heidelberg, pp. 146162.
Claessen K., & Ljunglöf P. (2000) Typed logical variables in Haskell. In Proceedings of the Haskell Workshop, Montreal, Canada. ACM SIGPLAN.
Cook W. R. (1989) A Denotational Semantics of Inheritance, PhD thesis. Providence, RI: Brown University.
ECLiPSe. (2008) Eclipse [online]. Available at: Last accessed 3 August 2009.
Fischer S. (2008) Constrained monadic computations [online]. Available at: Last accessed 3 August 2009.
Frühwirth T. (1998) Theory and practice of Constraint Handling Rules, J. Logic Program. 37 (1–3): 95138.
Hinze R. (2001) Prolog's control constructs in a functional setting – axioms and implementation, Int. J Foundations Comp. Sci. 12 (2): 125170.
Jaffar J. & Lassez J.-L. (1987) Constraint logic programming. In POPL ‘87: Proceedings of the 14th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages. Munich, Germany, pp. 111119.
Jansson P. & Jeuring J. (1998) Polytypic unification, J. Funct. Program. 8 (5): 527536.
Kiselyov O., chieh Shan, C., Friedman D. P. & Sabry A. (2005) Backtracking, interleaving, and terminating monad transformers (functional pearl), SIGPLAN Not. 40 (9): 192203.
Laburthe F. & Caseau Y. (2002) SALSA: A language for search algorithms, Constraints 7 (3): 255288.
Marriott K. & Stuckey P. J. (1998) Programming with Constraints: An Introduction. MIT Press, Cambridge, Massachusetts, USA.
Michel L., See A. & Hentenryck P Van. (2006) High-level nondeterministic abstractions in. In Cp, Benhamou F. (ed), Lecture Notes in Computer Science, vol. 4204. Springer, pp. 359–374.
Overton D. (2008) Haskell FD library [online]. Available at: Last accessed 3 August 2009.
Régin J.-C. (1994) A filtering algorithm for constraints of difference in csps. In Aaai, pp. 362–367.
Schrijvers T., Peyton Jones, S., Chakravarty M. & Sulzmann M. (2008) Type checking with open type functions. In Proceedings of the 13th ACM SIGPLAN international conference on Functional programming. ACM, pp. 51–62.
Schulte C. (1997) Programming constraint inference engines. In Principles and Practice of Constraint Programming – cp97, Proceedings. Lecture Notes in Computer Science, vol. 1330. Springer, pp. 519533.
Schulte C. (1999) Comparing trailing and copying for CP. In Proceedings of the 16th International Conference on Logic Programming, De Schreye D. (ed), Las Cruces, NM: MIT Press, pp. 275289.
Schulte C., Duchier D., Konvicka F., Szokoli G., Tack G., Lagerkvist M., Pekczynski P., Reischuk R. & Guns T. (2009) The Gecode generic constraint development environment [online]. Available at: Last accessed 3 August 2009.
Seres S. & Spivey M. J. (Sept. 1999) Embedding Prolog into Haskell. In Haskell Workshop '99. Paris, France.
SICStus. (2008) Sicstus Prolog [online]. Available at: Last accessed 3 August 2009.
Smolka G. (1995) The Oz programming model. In Computer Science Today, Lecture Notes in Computer Science, vol. 1000. Springer, pp. 324343.
Somogyi Z., Henderson F. & Conway T. (1996) The execution algorithm of Mercury: An efficient purely declarative logic programming language, J. Logic Program. 29 (1–3): 1764.
Van Hentenryck P. (1999) The OPL Optimization Programming Language. Cambridge, MA: MIT Press.
Van Hentenryck P. & Michel L. (2005) Constraint-Based Local Search. MIT Press.
Van Hentenryck P. & Michel L. (2006) Nondeterministic control for hybrid search, Constraints 11 (4): 353373.
Van Hentenryck P., Perron L., & Puget J.-F. (2000) Search and strategies in OPL, Acm Tocl. 1 (2): 285315.
Wadler P. (1985) How to replace failure by a list of successes, In Proceedings of a Conference on Functional Programming Languages and Computer Architecture. New York: Springer, pp. 113128.
Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Journal of Functional Programming
  • ISSN: 0956-7968
  • EISSN: 1469-7653
  • URL: /core/journals/journal-of-functional-programming
Please enter your name
Please enter a valid email address
Who would you like to send this to? *


Full text views

Total number of HTML views: 0
Total number of PDF views: 9 *
Loading metrics...

Abstract views

Total abstract views: 146 *
Loading metrics...

* Views captured on Cambridge Core between September 2016 - 23rd October 2017. This data will be updated every 24 hours.