predicate dsl a dsl for constructing predicates provides a visual trace of success or failure at each step in the execution. see doctests in src/PredState.hs