monad package:sbv
The program we need to crack. Note that different users get different
programs on the Advent-Of-Code site, so this is simply one example.
You can simply cut-and-paste your version instead. (Don't forget the
pragma NegativeLiterals to GHC so add x -1 parses
correctly as add x (-1).)
A Symbolic computation. Represented by a reader monad carrying the
state of the computation, layered on top of IO for creating unique
references to hold onto intermediate results.
Computations which support symbolic operations
Computations which support query operations.