you can also use an ADT of sealed classes to reify all the predicates and then fold the structure in...
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