evalExprBinOp ::
                    (binOp -> Int -> Int -> Int)
                    -- ^ How to evaluate binary operators
                 -> (expr -> Int)
                    -- ^ How to evaluate expressions
                 -> expr
                    -- ^ Left argument
                 -> binOp
                    -- ^ Binary operator
                 -> expr
                    -- ^ Right argument
                 -> Int
                    -- ^ Evaluation returns some Int
evalExprBinOp evalBinOp' evalExpr' l op r
  = evalBinOp' op (evalExpr' l) (evalExpr' r)
evalExprBinOp ::
                    (binOp -> Int -> Int -> Int)
                    -- ^ How to evaluate binary operators
                 -> (expr -> Int)
                    -- ^ How to evaluate expressions
                 -> expr
                    -- ^ Left argument
                 -> binOp
                    -- ^ Binary operator
                 -> expr
                    -- ^ Right argument
                 -> Int
evalExprBinOp evalBinOp' evalExpr' l op r
  = evalBinOp' op (evalExpr' l) (evalExpr' r)
evalExprBinOp evalBinOp' evalExpr' l op r
  = evalBinOp' op (evalExpr' l) (evalExpr' r)