you can also use an ADT of sealed classes to reify...
# functional
r
you can also use an ADT of sealed classes to reify all the predicates and then fold the structure in where you can perform optimizations