-- | Run a compiler
-- Creates the state from the tree being passed in
-- If there are any errors during the compilation they are reported together at the end
runFromExpr ::
       Options
    -> (Expression -> OhuaM env result)
    -> Expression
    -> LoggingT IO (Either Error result)
runFromExpr opts f tree =
    runFromBindings opts (f tree) $ HS.fromList $ [b | Var b <- universe tree]
runFromExpr ::
       Options
    -> (Expression -> OhuaM env result)
    -> Expression
    -> LoggingT IO (Either Error result)
runFromExpr opts f tree =
    runFromBindings opts (f tree) $ HS.fromList $ [b | Var b <- universe tree]
runFromExpr opts f tree =
    runFromBindings opts (f tree) $ HS.fromList $ [b | Var b <- universe tree]