declare queryable interface
Use single predicate for great syntax tree
convert anonymous predicates to classes we can later inspect
make this so it's useable else where
ASTs maybe