made 3-arity of analyze take an opt map rather than directly a map of
bindings, allowing for more opts in the future