From 48ab4bb79b0d2f16a2528d774045a9532370b1f5 Mon Sep 17 00:00:00 2001
From: Michael Hanus <mh@informatik.uni-kiel.de>
Date: Wed, 7 Oct 2020 18:43:29 +0200
Subject: [PATCH] Code refactoring

---
 src/Data/Format.curry | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/Data/Format.curry b/src/Data/Format.curry
index 37533f6..acc5d54 100644
--- a/src/Data/Format.curry
+++ b/src/Data/Format.curry
@@ -10,9 +10,10 @@
 --- <http://pubs.opengroup.org/onlinepubs/009695399/functions/fprintf.html>
 ---
 --- @author Jasper Sikorra - jsi@informatik.uni-kiel.de
---- @version November 2017
---- @category general
+--- @version October 2020
 ------------------------------------------------------------------------------
+{-# OPTIONS_CYMAKE -Wno-incomplete-patterns #-}
+
 module Data.Format
   ( showChar, showInt, showFloat, showString )
  where
@@ -201,7 +202,7 @@ type MantissaSigned      = String
 type Exponent = Int
 
 floater :: Sign -> MantissaBeforePoint -> MantissaAfterPoint -> Exponent
-  -> Floater
+        -> Floater
 floater = Floater
 
 floaterCreator :: MantissaSigned -> Exponent -> Floater
@@ -283,13 +284,12 @@ onePrePoint (Floater s m1 m2 e) | m1 == "0" && m2 == ""       =
   onePrePoint (Floater s (init m1) ((last m1):m2) (e+1))
 
 roundFloater :: Int -> Floater -> Floater
-roundFloater n (Floater s m1 m2 e) =
-    if (length m2 <= n)
-      then Floater s m1 (m2 ++ replicate (n - length m2) '0') e
-      else
-        if (digitToInt (m2 !! n) < 5)
-          then Floater s m1 (take n m2) e
-          else roundUp (Floater s m1 (take n m2) e)
+roundFloater n (Floater sgn mb ma exp) =
+    if (length ma <= n)
+      then Floater sgn mb (ma ++ replicate (n - length ma) '0') exp
+      else if (digitToInt (ma !! n) < 5)
+             then Floater sgn mb (take n ma) exp
+             else roundUp (Floater sgn mb (take n ma) exp)
   where
     roundUp :: Floater -> Floater
     roundUp (Floater s m1 m2 e) = Floater s m1Result m2Result e
@@ -301,6 +301,7 @@ roundFloater n (Floater s m1 m2 e) =
         m1Result = if m1Overflow
                      then "1" ++ m1Rounded
                      else m1Rounded
+
     roundStringUp :: String -> (String, Bool)
     roundStringUp s = let (res, overflow) = roundBigEndianStrUp (reverse s) True
                       in (reverse res, overflow)
@@ -308,12 +309,11 @@ roundFloater n (Floater s m1 m2 e) =
     roundBigEndianStrUp :: String -> Bool -> (String, Bool)
     roundBigEndianStrUp ""     b     = ("", b)
     roundBigEndianStrUp (c:cs) False = (c:cs, False)
-    roundBigEndianStrUp (c:cs) True  = let n = digitToInt c
-                                       in if n == 9
-                                            then
-                                              let (rs, overflow) = roundBigEndianStrUp cs True
-                                              in  ('0':rs, overflow)
-                                            else (show (n+1) ++ cs, False)
+    roundBigEndianStrUp (c:cs) True  =
+      let nc = digitToInt c
+      in if nc == 9 then let (rs, overflow) = roundBigEndianStrUp cs True
+                         in  ('0':rs, overflow)
+                    else (show (nc+1) ++ cs, False)
 
 --- FLOATER DATA TYPE END ------------------------
 
-- 
GitLab