Framework for solving logic puzzles (like the Zebra Puzzle) in Haskell