evalExtendedExpr :: ExtendedExpr -> Int
evalExtendedExpr (Fix (ExprUniOp op arg)) = evalOp evalArg
  where evalOp = case op of
                   Fac -> product . flip take [1..]
                   Log -> floor . log . fromIntegral
        evalArg = evalExtendedExpr arg
evalExtendedExpr :: ExtendedExpr -> Int
evalExtendedExpr (Fix (ExprUniOp op arg)) = evalOp evalArg
  where evalOp = case op of
                   Fac -> product . flip take [1..]
                   Log -> floor . log . fromIntegral
        evalArg = evalExtendedExpr arg
evalExtendedExpr (Fix (ExprUniOp op arg)) = evalOp evalArg
  where evalOp = case op of
                   Fac -> product . flip take [1..]
                   Log -> floor . log . fromIntegral
        evalArg = evalExtendedExpr arg