shithub: MicroHs

Download patch

ref: 0c7e35d8ca86321511f84a2c88999b18dc50f74f
parent: eeac1a81c25a9c4cf9cee92bc4c988c07a15c6c9
parent: 44a043dac3da746d442ebb9c742b8ebc733b0c36
author: Robert Krook <rewbert93@gmail.com>
date: Mon Sep 25 09:11:29 EDT 2023

Merge pull request #2 from Rewbert/current-merge

now the support I added for doubles work again, time to rebase again

--- a/Makefile
+++ b/Makefile
@@ -46,10 +46,12 @@
 	$(GHCB) -c ghc/Primitives.hs
 	$(GHCB) -c ghc/Data/Bool_Type.hs
 	$(GHCB) -c ghc/Data/Ordering_Type.hs
+	$(GHCB) -c ghc/Data/Double.hs
 	$(GHCB) -c src/PrimTable.hs
 	$(GHCC) -c lib/Control/Error.hs
 	$(GHCC) -c lib/Data/Bool.hs
 	$(GHCC) -c lib/Data/Int.hs
+	$(GHCC) -c lib/Data/Double.hs
 	$(GHCC) -c lib/Data/Char.hs
 	$(GHCC) -c lib/Data/Either.hs
 	$(GHCC) -c lib/Data/Tuple.hs
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
 v3.5
-882
-(($A :0 _769) (($A :1 (($B _815) _0)) (($A :2 ((($S' _815) _0) $I)) (($A :3 _739) (($A :4 (_3 "undefined")) (($A :5 $I) (($A :6 ((($C' $B) _768) (($C _48) _5))) (($A :7 ((($C' _6) (_786 _45)) ((_48 _784) _44))) (($A :8 (($B (($S _815) _784)) _3)) (($A :9 $T) (($A :10 ($T $I)) (($A :11 (($B (_48 _159)) _10)) (($A :12 (($B ($B (_47 _9))) ((($C' $B) (($B $C) _10)) ($B _10)))) (($A :13 (($B ($B (_47 _9))) ((($C' $B) (($B $C) _10)) ($BK _10)))) (($A :14 (($B (_47 _9)) $P)) (($A :15 (($B ($B (_47 _9))) (($B (($C' $C) _10)) ($B $P)))) (($A :16 _15) (($A :17 (($B (_47 _9)) ($B ($P _709)))) (($A :18 (($B (_47 _9)) ($BK ($P _709)))) (($A :19 ((_47 _9) (($S $P) $I))) (($A :20 (($B (_47 _9)) (($C ($S' $P)) $I))) (($A :21 (($B $Y) (($B ($B ($P (_14 _88)))) ((($C' $B) (($B ($C' $B)) ($B _12))) ((($C' ($C' $B)) ($B _12)) (($B ($B _14)) _89)))))) (($A :22 (($B $Y) (($B ($B ($P (_14 _709)))) (($B ($C' $B)) ($B _13))))) (($A :23 _3) (($A :24 ($T (_14 _709))) (($A :25 (($C $C) _32)) (($A :26 ($T _31)) (($A :27 (($P _32) _31)) (($A :28 _32) (($A :29 (($C (($C $S') _27)) $I)) (($A :30 (($C $S) _27)) (($A :31 $K) (($A :32 $A) (($A :33 _744) (($A :34 _745) (($A :35 ((($S' _26) (_736 97)) (($C _736) 122))) (($A :36 ((($S' _26) (_736 65)) (($C _736) 90))) (($A :37 ((($S' _25) _35) _36)) (($A :38 ((($S' _26) (_736 48)) (($C _736) 57))) (($A :39 ((($S' _26) (_736 32)) (($C _736) 126))) (($A :40 _733) (($A :41 _734) (($A :42 _736) (($A :43 _735) (($A :44 (($B $BK) $T)) (($A :45 ($BK $T)) (($A :46 $P) (($A :47 $I) (($A :48 $B) (($A :49 $I) (($A :50 $K) (($A :51 $C) (($A :52 _740) (($A :53 (($C (($C $S') _159)) _160)) (($A :54 ((($C' ($S' ($C' $B))) $B) $I)) (($A :55 _710) (($A :56 _711) (($A :57 _712) (($A :58 _713) (($A :59 _714) (($A :60 _715) (($A :61 (_56 0)) (($A :62 _721) (($A :63 _722) (($A :64 _723) (($A :65 _724) (($A :66 _725) (($A :67 _726) (($A :68 _62) (($A :69 ($BK $K)) (($A :70 (($B $BK) (($B ($B $BK)) $P))) (($A :71 (($B ($B ($B $BK))) (($B ($B ($B $BK))) (($B ($B ($B $C))) (($B ($B $C)) $P))))) (($A :72 ((($S' $S) ((($S' ($S' $C)) ((($C' ($C' $S)) ((($C' $B) (($B ($S' $S')) ((($C' $B) (($B _25) (_65 0))) (_62 0)))) (($B ($B (($C' $P) (_60 1)))) _55))) ($C $P))) _58)) _59)) (($A :73 _69) (($A :74 ((($S' $C) (($B ($P _148)) ((($C' ($C' $B)) ((($C' $C) _62) _148)) _149))) (($B (($C' ($C' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) (($B (($C' ($C' ($C' $C))) (($B ($B ($B (($S' $S') (_62 0))))) (($B (($C' ($C' $C)) (($B ($B (($S' $S') (_62 1)))) (($B (($C' $C) (($B (($C' $S') (_62 2))) ($C _74)))) ($C _74))))) ($C _74))))) ($C _74)))) ($T $K))) ($T $A)))) (($C _72) 4)))) (($A :75 (_81 _50)) (($A :76 ((_96 (_53 _75)) _73)) (($A :77 (($C ((($C' $B) (($P _88) ((($C' ($C' $O)) $P) $K))) ((($S' ($C' ($C' ($C' $B)))) (($B ($B ($B ($B _78)))) ((($S' ($C' ($C' $B))) (($B ($B ($B _78))) ((($S' ($C' $B)) (($B ($B _78)) ((($C' $B) (($B _94) ($T 0))) _77))) ((($C' $B) (($B _94) ($T 1))) _77)))) ((($C' $B) (($B _94) ($T 2))) _77)))) ((($C' $B) (($B _94) ($T 3))) _77)))) (($B $T) (($B ($B $P)) (($C' _55) (_57 4)))))) (($A :78 (($S $S) (($B $BK) (($B $BK) ((($S' $S) $T) (($B $BK) (($B $BK) (($C ((($S' $C') $S) (($B ($B ($B ($S $B)))) (($B ($B ($B ($B ($B $BK))))) (($B (($S' ($C' $B)) (($B $B') $B'))) (($B ($B ($B ($B ($B ($S $B)))))) (($B ($B ($B ($B ($B ($B ($B $BK))))))) ((($C' $B) ($B' ($B' (($B ($C' ($C' ($C' $C)))) (($B (($C' $B) ($B' (($B $C) _64)))) (($B (($C' $B) _89)) _78)))))) (($B (($C' $B) _89)) ($C _78)))))))))) (((_708 "lib/Data/IntMap.hs") 3) 8))))))))) (($A :79 ((_48 (_94 _159)) _77)) (($A :80 ((($C' $C) ((($C' $C) ($C _74)) (_3 "Data.IntMap.!"))) $I)) (($A :81 (($B (($C' $B) $T)) (($B ($B $Y)) ((($C' ($C' ($S' ($S' $C)))) (($B (($S' $B) (($B ($S' $P)) ($C _70)))) (($B ($B (($C' ($S' $C)) (($B (($S' ($S' $S')) _62)) ((($C' ($C' $B)) (($B $B') ($B _47))) ((($C' ($C' _47)) _75) ((((_71 _69) _69) _69) _69))))))) ($B (($C' $B) _70))))) ((($C' $B) (($B ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' $C)))) ((($C' ($C' ($C' ($C' ($C' $S'))))) (($B ($B ($B ($B ($B $C))))) ((($S' ($S' ($S' ($S' ($S' $C))
\ No newline at end of file
+916
+(($A :0 _802) (($A :1 (($B _848) _0)) (($A :2 ((($S' _848) _0) $I)) (($A :3 _772) (($A :4 (_3 "undefined")) (($A :5 $I) (($A :6 ((($C' $B) _801) (($C _68) _5))) (($A :7 ((($C' _6) (_819 _65)) ((_68 _817) _64))) (($A :8 (($B (($S _848) _817)) _3)) (($A :9 $T) (($A :10 ($T $I)) (($A :11 (($B (_68 _179)) _10)) (($A :12 (($B ($B (_67 _9))) ((($C' $B) (($B $C) _10)) ($B _10)))) (($A :13 (($B ($B (_67 _9))) ((($C' $B) (($B $C) _10)) ($BK _10)))) (($A :14 (($B (_67 _9)) $P)) (($A :15 (($B ($B (_67 _9))) (($B (($C' $C) _10)) ($B $P)))) (($A :16 _15) (($A :17 (($B (_67 _9)) ($B ($P _731)))) (($A :18 (($B (_67 _9)) ($BK ($P _731)))) (($A :19 ((_67 _9) (($S $P) $I))) (($A :20 (($B (_67 _9)) (($C ($S' $P)) $I))) (($A :21 (($B $Y) (($B ($B ($P (_14 _108)))) ((($C' $B) (($B ($C' $B)) ($B _12))) ((($C' ($C' $B)) ($B _12)) (($B ($B _14)) _109)))))) (($A :22 (($B $Y) (($B ($B ($P (_14 _731)))) (($B ($C' $B)) ($B _13))))) (($A :23 _3) (($A :24 ($T (_14 _731))) (($A :25 (($C $C) _32)) (($A :26 ($T _31)) (($A :27 (($P _32) _31)) (($A :28 _32) (($A :29 (($C (($C $S') _27)) $I)) (($A :30 (($C $S) _27)) (($A :31 $K) (($A :32 $A) (($A :33 _777) (($A :34 _778) (($A :35 ((($S' _26) (_769 97)) (($C _769) 122))) (($A :36 ((($S' _26) (_769 65)) (($C _769) 90))) (($A :37 ((($S' _25) _35) _36)) (($A :38 ((($S' _26) (_769 48)) (($C _769) 57))) (($A :39 ((($S' _26) (_769 32)) (($C _769) 126))) (($A :40 _766) (($A :41 _767) (($A :42 _769) (($A :43 _768) (($A :44 _738) (($A :45 _739) (($A :46 _740) (($A :47 (_45 f0.0)) (($A :48 _44) (($A :49 _45) (($A :50 _46) (($A :51 _741) (($A :52 _742) (($A :53 _51) (($A :54 _52) (($A :55 _743) (($A :56 _744) (($A :57 _745) (($A :58 _746) (($A :59 _55) (($A :60 _56) (($A :61 _57) (($A :62 _58) (($A :63 _747) (($A :64 (($B $BK) $T)) (($A :65 ($BK $T)) (($A :66 $P) (($A :67 $I) (($A :68 $B) (($A :69 $I) (($A :70 $K) (($A :71 $C) (($A :72 _773) (($A :73 (($C (($C $S') _179)) _180)) (($A :74 ((($C' ($S' ($C' $B))) $B) $I)) (($A :75 _732) (($A :76 _733) (($A :77 _734) (($A :78 _735) (($A :79 _736) (($A :80 _737) (($A :81 (_76 0)) (($A :82 _754) (($A :83 _755) (($A :84 _756) (($A :85 _757) (($A :86 _758) (($A :87 _759) (($A :88 _82) (($A :89 ($BK $K)) (($A :90 (($B $BK) (($B ($B $BK)) $P))) (($A :91 (($B ($B ($B $BK))) (($B ($B ($B $BK))) (($B ($B ($B $C))) (($B ($B $C)) $P))))) (($A :92 ((($S' $S) ((($S' ($S' $C)) ((($C' ($C' $S)) ((($C' $B) (($B ($S' $S')) ((($C' $B) (($B _25) (_85 0))) (_82 0)))) (($B ($B (($C' $P) (_80 1)))) _75))) ($C $P))) _78)) _79)) (($A :93 _89) (($A :94 ((($S' $C) (($B ($P _168)) ((($C' ($C' $B)) ((($C' $C) _82) _168)) _169))) (($B (($C' ($C' ($C' $C))) ((($C' ($C' ($C' $C))) ((($C' ($C' ($C' ($C' $S')))) (($B ($B ($B ($B $C)))) (($B (($C' ($C' ($C' $C))) (($B ($B ($B (($S' $S') (_82 0))))) (($B (($C' ($C' $C)) (($B ($B (($S' $S') (_82 1)))) (($B (($C' $C) (($B (($C' $S') (_82 2))) ($C _94)))) ($C _94))))) ($C _94))))) ($C _94)))) ($T $K))) ($T $A)))) (($C _92) 4)))) (($A :95 (_101 _70)) (($A :96 ((_116 (_73 _95)) _93)) (($A :97 (($C ((($C' $B) (($P _108) ((($C' ($C' $O)) $P) $K))) ((($S' ($C' ($C' ($C' $B)))) (($B ($B ($B ($B _98)))) ((($S' ($C' ($C' $B))) (($B ($B ($B _98))) ((($S' ($C' $B)) (($B ($B _98)) ((($C' $B) (($B _114) ($T 0))) _97))) ((($C' $B) (($B _114) ($T 1))) _97)))) ((($C' $B) (($B _114) ($T 2))) _97)))) ((($C' $B) (($B _114) ($T 3))) _97)))) (($B $T) (($B ($B $P)) (($C' _75) (_77 4)))))) (($A :98 (($S $S) (($B $BK) (($B $BK) ((($S' $S) $T) (($B $BK) (($B $BK) (($C ((($S' $C') $S) (($B ($B ($B ($S $B)))) (($B ($B ($B ($B ($B $BK))))) (($B (($S' ($C' $B)) (($B $B') $B'))) (($B ($B ($B ($B ($B ($S $B)))))) (($B ($B ($B ($B ($B ($B ($B $BK))))))) ((($C' $B) ($B' ($B' (($B ($C' ($C' ($C' $C)))) (($B (($C' $B) ($B' (($B $C) _84)))) (($B (($C' $B) _109)) _98)))))) (($B (($C' $B) _109)) ($C _98)))))))))) (((_730 "lib/Data/IntMap.hs") 3) 8))))))))) (($A :99 ((_68 (_114 _179)) _97)) (($A :100 ((($C' $C) ((($C' $C) ($C _94)) (_3 "Data.IntMap.!"))) $I)) (($A :101 (($B (($C' $B) $T)) (($B ($B $Y)) ((($C' ($C' ($S' ($S' $C)))) (($B (($S' $B) (($B ($S' $P)) ($C _90)))) (($B ($B (($C' ($S' $C)
\ No newline at end of file
--- /dev/null
+++ b/ghc/Data/Double.hs
@@ -1,0 +1,4 @@
+module Data.Double(Double, showDouble) where
+
+showDouble :: Double -> [Char]
+showDouble = show
\ No newline at end of file
--- a/ghc/Primitives.hs
+++ b/ghc/Primitives.hs
@@ -4,6 +4,7 @@
   Char,
   Handle,
   Int,
+  Double,
   IO,
   Word,
   NFData(..),
@@ -126,6 +127,39 @@
 
 primWordGE :: Word -> Word -> Bool
 primWordGE = (>=)
+
+primDoubleAdd :: Double -> Double -> Double
+primDoubleAdd  = (+)
+
+primDoubleSub :: Double -> Double -> Double
+primDoubleSub  = (-)
+
+primDoubleMul :: Double -> Double -> Double
+primDoubleMul  = (*)
+
+primDoubleEQ :: Double -> Double -> Bool
+primDoubleEQ = (==)
+
+primDoubleNE :: Double -> Double -> Bool
+primDoubleNE = (/=)
+
+primDoubleLT :: Double -> Double -> Bool
+primDoubleLT = (<)
+
+primDoubleLE :: Double -> Double -> Bool
+primDoubleLE = (<=)
+
+primDoubleGT :: Double -> Double -> Bool
+primDoubleGT = (>)
+
+primDoubleGE :: Double -> Double -> Bool
+primDoubleGE = (>=)
+
+primDoubleShow :: Double -> [Char]
+primDoubleShow = show
+
+primDoubleRead :: [Char] -> Double
+primDoubleRead = read
 
 ------
 
--- a/lib/Data/Double.hs
+++ b/lib/Data/Double.hs
@@ -1,11 +1,11 @@
 -- Copyright 2023 Lennart Augustsson
 -- See LICENSE file for full license.
-module Data.Double(module Data.Double) where
+module Data.Double(module Data.Double, Double) where
 import Primitives
 import Data.Bool_Type
 
---Yinfixl 6 +,-
---Yinfixl 7 *
+infixl 6 +,-
+infixl 7 *
 
 -- Arithmetic
 (+) :: Double -> Double -> Double
@@ -27,7 +27,7 @@
 
 --------------------------------
 
---Yinfix 4 ==,/=,<,<=,>,>=
+infix 4 ==,/=,<,<=,>,>=
 
 -- Comparison
 (==) :: Double -> Double -> Bool
--- a/lib/Primitives.hs
+++ b/lib/Primitives.hs
@@ -49,6 +49,8 @@
 primDoubleGE = primitive "fge"
 primDoubleShow :: Double -> [Char]
 primDoubleShow = primitive "fshow"
+primDoubleRead :: [Char] -> Double
+primDoubleRead = primitive "fread"
 
 primWordAdd :: Word -> Word -> Word
 primWordAdd  = primitive "+"
--- a/lib/Text/String.hs
+++ b/lib/Text/String.hs
@@ -52,6 +52,9 @@
     rd = foldl (\ a c -> a * 10 + ord c - ord '0') 0
   in if eqChar (head cs) '-' then 0 - rd (tail cs) else rd cs
 
+readDouble :: String -> Double
+readDouble = primDoubleRead
+
 showBool :: Bool -> String
 showBool arg =
   case arg of
--- a/src/MicroHs/Desugar.hs
+++ b/src/MicroHs/Desugar.hs
@@ -154,7 +154,7 @@
       n = length is
       ev = Var v
       one m i = letE i (mkTupleSel m n ev)
-      bnds = foldr (.) id $ zipWith one [0..] is
+      bnds = foldr (.) id $ zipWith one [0 .. ] is
   in  letRecE v (bnds $ mkTuple es) $
       bnds body
 
--- a/src/MicroHs/Expr.hs
+++ b/src/MicroHs/Expr.hs
@@ -34,6 +34,7 @@
 import Data.List
 import Data.Maybe
 import MicroHs.Ident
+import qualified Data.Double as D
 --Ximport Compat
 --Ximport GHC.Stack
 --Ximport Control.DeepSeq
@@ -131,7 +132,7 @@
 
 data Lit
   = LInt Int
-  | LDouble Double
+  | LDouble D.Double
   | LChar Char
   | LStr String
   | LPrim String
@@ -434,7 +435,7 @@
 showLit l =
   case l of
     LInt i -> showInt i
-    LDouble d -> case showDouble d of
+    LDouble d -> case D.showDouble d of
       '-':xs -> '-':'f':xs
       xs -> 'f':xs
     LChar c -> showChar c
--- a/src/MicroHs/Graph.hs
+++ b/src/MicroHs/Graph.hs
@@ -103,7 +103,7 @@
 
     max_v           = length edges0 - 1
     sorted_edges    = sortLE lek edges0
-    edges1          = zip [0..] sorted_edges
+    edges1          = zip [0 .. ] sorted_edges
 
     key_map         = IM.fromList [(v, k)                      | (v, (_,    k, _ )) <- edges1]
 
--- a/src/MicroHs/Lex.hs
+++ b/src/MicroHs/Lex.hs
@@ -5,6 +5,7 @@
 import Prelude --Xhiding(lex, showChar, showString)
 import Data.Char
 import Data.List
+import qualified Data.Double as D
 --Ximport Compat
 import MicroHs.Ident
 
@@ -13,7 +14,7 @@
   | TString Loc String
   | TChar   Loc Char
   | TInt    Loc Int
-  | TDouble Loc Double
+  | TDouble Loc D.Double
   | TSpec   Loc Char
   | TError  Loc String
   | TBrace  Loc
@@ -25,7 +26,7 @@
 showToken (TString _ s) = showString s
 showToken (TChar _ c) = showChar c
 showToken (TInt _ i) = showInt i
-showToken (TDouble _ d) = showDouble d
+showToken (TDouble _ d) = D.showDouble d
 showToken (TSpec _ c) = [c]
 showToken (TError _ s) = "ERROR " ++ s
 showToken (TBrace _) = "TBrace"
@@ -91,12 +92,12 @@
   case span isDigit cs of
     (ds, rs) | null rs || not (eqChar (head rs) '.') -> TInt loc (readInt ('-':d:ds)) : lex (addCol loc $ 2 + length ds) rs
              | otherwise -> case span isDigit (tail rs) of
-      (ns, rs') -> TDouble loc (readDouble ('-':d:ds ++ '.':ns)) : lex (addCol loc $ 3 + length ds + length ns) rs'
+      (ns, rs') -> TDouble loc (readDouble (('-':d:ds) ++ ('.':ns))) : lex (addCol loc $ 3 + length ds + length ns) rs'
 lex loc (d:cs) | isDigit d =
   case span isDigit cs of
     (ds, rs) | null rs || not (eqChar (head rs) '.') -> TInt loc (readInt (d:ds)) : lex (addCol loc $ 1 + length ds) rs
              | otherwise -> case span isDigit (tail rs) of
-      (ns, rs') -> TDouble loc (readDouble (d:ds ++ '.':ns)) : lex (addCol loc $ 2 + length ds + length ns) rs' 
+      (ns, rs') -> TDouble loc (readDouble ((d:ds) ++ ('.':ns))) : lex (addCol loc $ 2 + length ds + length ns) rs' 
 lex loc (d:cs) | isOperChar d  =
   case span isOperChar cs of
     (ds, rs) -> TIdent loc [] (d:ds) : lex (addCol loc $ 1 + length ds) rs
--- a/src/runtime/eval.c
+++ b/src/runtime/eval.c
@@ -150,7 +150,7 @@
                 T_A, T_Y, T_SS, T_BB, T_CC, T_P, T_O, T_T, T_BK, T_ADD, T_SUB, T_MUL,
                 T_QUOT, T_REM, T_SUBR, T_UQUOT, T_UREM,
                 T_FADD, T_FSUB, T_FMUL,
-                T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW,
+                T_FEQ, T_FNE, T_FLT, T_FLE, T_FGT, T_FGE, T_FSHOW, T_FREAD,
                 T_EQ, T_NE, T_LT, T_LE, T_GT, T_GE, T_ULT, T_ULE, T_UGT, T_UGE,
                 T_ERROR, T_SEQ, T_EQUAL, T_COMPARE, T_RNF,
                 T_IO_BIND, T_IO_THEN, T_IO_RETURN, T_IO_GETCHAR, T_IO_PUTCHAR,
@@ -452,6 +452,7 @@
   {"fgt", T_FGT},
   {"fge", T_FGE},
   {"fshow", T_FSHOW},
+  {"fread", T_FREAD},
   { "==", T_EQ },
   { "/=", T_NE },
   { "<", T_LT },
@@ -1222,6 +1223,7 @@
   case T_FGT: fprintf(f, "$fgt"); break;
   case T_FGE: fprintf(f, "$fge"); break;
   case T_FSHOW: fprintf(f, "$fshow"); break;
+  case T_FREAD: fprintf(f, "$fread"); break;
   case T_EQ: fprintf(f, "$=="); break;
   case T_NE: fprintf(f, "$/="); break;
   case T_LT: fprintf(f, "$<"); break;
@@ -1672,6 +1674,17 @@
     case T_FLE: CMPF(<=);
     case T_FGT: CMPF(>);
     case T_FGE: CMPF(>=);
+    case T_FREAD:
+      CHECK(1);
+      msg = evalstring(ARG(TOP(0)));
+      xd = strtod(msg, NULL);
+      free(msg);
+
+      POP(1);
+      n = TOP(-1);
+      
+      GOIND(mkDouble(xd));
+
     case T_FSHOW:
       // check that the double exists
       CHECK(1);
--- a/tests/FArith.hs
+++ b/tests/FArith.hs
@@ -1,7 +1,9 @@
 module FArith(module FArith) where
 
-import Data.Double
 import Prelude
+import Primitives
+import qualified Data.Double as D
+import Text.String
 
 list1 :: [Double]
 list1 = [-100.343241, -53.3248973, -0.0, 0.0, 1.0, 1.23453523, 3243534.34534, 999.999]
@@ -11,5 +13,8 @@
 
 main :: IO ()
 main = do
-  putStrLn $ showList showDouble [ op x y | x <- list1, y <- list2, op <- [addDouble, subDouble, mulDouble] ]
-  putStrLn $ showList showBool [ op x y | x <- list1, y <- list2, op <- [eqDouble, neqDouble, ltDouble, leDouble, gtDouble, geDouble] ]
\ No newline at end of file
+  putStrLn $ showList D.showDouble [ op x y | x <- list1, y <- list2, op <- [D.addDouble, D.subDouble, D.mulDouble] ]
+  putStrLn $ showList showBool [ op x y | x <- list1, y <- list2, op <- [D.eqDouble, D.neqDouble, D.ltDouble, D.leDouble, D.gtDouble, D.geDouble] ]
+  let str = readDouble "1.576"
+  putStrLn $ D.showDouble str
+  putStrLn $ D.showDouble $ D.addDouble 1.0 $ readDouble "2.5"
\ No newline at end of file
--- a/tests/FArith.ref
+++ b/tests/FArith.ref
@@ -1,2 +1,4 @@
 [-200.686482,0.0,10068.766014,-153.668138,-47.018344,5350.793021,-100.343241,-100.343241,0.0,-100.343241,-100.343241,-0.0,-99.343241,-101.343241,-100.343241,-99.108706,-101.577776,-123.877266,3243434.002099,-3243634.688581,-325466748.506229,899.655759,-1100.342241,-100343.140657,-153.668138,47.018344,5350.793021,-106.649795,0.0,2843.544672,-53.324897,-53.324897,0.0,-53.324897,-53.324897,-0.0,-52.324897,-54.324897,-53.324897,-52.090362,-54.559433,-65.831464,3243481.020443,-3243587.670237,-172961135.854278,946.674103,-1053.323897,-53324.843975,-100.343241,100.343241,0.0,-53.324897,53.324897,0.0,-0.0,0.0,0.0,0.0,-0.0,-0.0,1.0,-1.0,-0.0,1.234535,-1.234535,-0.0,3243534.34534,-3243534.34534,-0.0,999.999,-999.999,-0.0,-100.343241,100.343241,-0.0,-53.324897,53.324897,-0.0,0.0,0.0,-0.0,0.0,0.0,0.0,1.0,-1.0,0.0,1.234535,-1.234535,0.0,3243534.34534,-3243534.34534,0.0,999.999,-999.999,0.0,-99.343241,101.343241,-100.343241,-52.324897,54.324897,-53.324897,1.0,1.0,-0.0,1.0,1.0,0.0,2.0,0.0,1.0,2.234535,-0.234535,1.234535,3243535.34534,-3243533.34534,3243534.34534,1000.999,-998.999,999.999,-99.108706,101.577776,-123.877266,-52.090362,54.559433,-65.831464,1.234535,1.234535,-0.0,1.234535,1.234535,0.0,2.234535,0.234535,1.234535,2.46907,0.0,1.524077,3243535.579875,-3243533.110805,4004257.419037,1001.233535,-998.764465,1234.533995,3243434.002099,3243634.688581,-325466748.506229,3243481.020443,3243587.670237,-172961135.854278,3243534.34534,3243534.34534,-0.0,3243534.34534,3243534.34534,0.0,3243535.34534,3243533.34534,3243534.34534,3243535.579875,3243533.110805,4004257.419037,6487068.69068,0.0,10520515049400.181641,3244534.34434,3242534.34634,3243531101.805655,899.655759,1100.342241,-100343.140657,946.674103,1053.323897,-53324.843975,999.999,999.999,-0.0,999.999,999.999,0.0,1000.999,998.999,999.999,1001.233535,998.764465,1234.533995,3244534.34434,-3242534.34634,3243531101.805655,1999.998,0.0,999998.000001]
 [True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,True,True,False,False,False,True,True,True,False,False,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,True,False,False,True,False,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,False,False,True,True,False,True,True,True,False,False,True,False,False,True,False,True]
+1.576
+3.5
--- a/tests/MutRec.hs
+++ b/tests/MutRec.hs
@@ -5,4 +5,4 @@
 main = do
   let even i = if i == 0 then True  else odd  (i - 1)
       odd  i = if i == 0 then False else even (i - 1)
-  putStrLn $ showList showBool $ map even [1..5] ++ map odd [1..5]
+  putStrLn $ showList showBool $ map even [1 .. 5] ++ map odd [1 .. 5]
--