In my previous post on constraint programming, I took the following term type as an object language and started doing meta-level work with it:
data Term = Term !Label ![Term]
I handled the meta level in a manner that isn’t particularly typeful:
data Term = Term !Label ![Term] | Metavar Integer
That’s okay for a quick and dirty solver, but there are better options if you want a bit more safety! Continue reading
In Introduction to Constraint Programming I made something of a mistake. It was a remarkably easy one to make, because I stepped outside the bounds of the type system’s help – and especially that of those who’ve declared interfaces before me.
In forthcoming posts I’m going to be making heavy use of constraint programming, so I’m going to do an intro to constraint programming as I see it first so everyone knows what I’m talking about before I start making controversial statements. The code’s all in Haskell, which is my usual language of choice. If you’re feeling pedantic, assume I’ve got the basics imported (Data.Map, Control.Monad etc) and hidden stuff that’d conflict with the only things that typecheck – there’s a full source file to play with at the bottom if you want to go further.
Some basic definitions
Constraint programming isn’t a paradigm itself, but it can be viewed as a "paradigm transformer" Continue reading