evalExprUniOp ::    (uniOp -> Int -> Int)
                    -- ^ How to evaluate unary operators
                 -> (expr -> Int)
                    -- ^ How to evaluate expressions
                 -> uniOp
                    -- ^ Unary operator
                 -> expr
                    -- ^ Argument
                 -> Int
                    -- ^ Evaluation returns some Int
evalExprUniOp evalUniOp' evalExpr' op arg = evalUniOp' op (evalExpr' arg)
evalExprUniOp ::    (uniOp -> Int -> Int)
                    -- ^ How to evaluate unary operators
                 -> (expr -> Int)
                    -- ^ How to evaluate expressions
                 -> uniOp
                    -- ^ Unary operator
                 -> expr
                    -- ^ Argument
                 -> Int
evalExprUniOp evalUniOp' evalExpr' op arg = evalUniOp' op (evalExpr' arg)
evalExprUniOp evalUniOp' evalExpr' op arg = evalUniOp' op (evalExpr' arg)