Evaluating AST
@spec eval(ast :: any(), bindings :: map(), functions_module :: atom()) :: {:ok, res :: any()} | {:error, any()}