@@ -10,12 +10,17 @@ parsePositive : Num a => String -> Maybe a
10parsePositive s = parsePosTrimmed (trim s) where
10parsePositive s = parsePosTrimmed (trim s) where
11 parsePosTrimmed s with (strM s)
11 parsePosTrimmed s with (strM s)
12 parsePosTrimmed "" | StrNil = Nothing
12 parsePosTrimmed "" | StrNil = Nothing
13− parsePosTrimmed (strCons x xs) | (StrCons x xs) = if (x == '+') then map fromInteger (parsePosAux (unpack xs) 0)
13+ parsePosTrimmed (strCons x xs) | (StrCons x xs) =
15+ then map fromInteger (parsePosAux (unpack xs) (cast {from=Int} 0))
14− else map fromInteger (parsePosAux (unpack xs) (ord x - ord '0')) where
16+ else map fromInteger (parsePosAux (unpack xs) (cast (ord x - ord '0')))
15− parsePosAux : (List Char) -> Int -> Maybe Integer
18+ parsePosAux : (List Char) -> Integer -> Maybe Integer
16− parsePosAux [] acc = Just (cast acc)
19+ parsePosAux [] acc = Just acc
20+ parsePosAux (c :: cs) acc =
21+ if (c >= '0' && c <= '9')
17− parsePosAux (c :: cs) acc = if (c >= '0' && c <= '9') then parsePosAux cs ((acc * 10) + (ord c) - (ord '0'))
22+ then parsePosAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
18− else Nothing
23+ else Nothing
21||| Convert a number string to a Num.
26||| Convert a number string to a Num.
@@ -28,11 +33,17 @@ parseInteger : (Num a, Neg a) => String -> Maybe a
28parseInteger s = parseIntTrimmed (trim s) where
33parseInteger s = parseIntTrimmed (trim s) where
29 parseIntTrimmed s with (strM s)
34 parseIntTrimmed s with (strM s)
30 parseIntTrimmed "" | StrNil = Nothing
35 parseIntTrimmed "" | StrNil = Nothing
36+ parseIntTrimmed (strCons x xs) | (StrCons x xs) =
31− parseIntTrimmed (strCons x xs) | (StrCons x xs) = if (x == '-') then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) 0)
38+ then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) (cast {from=Int} 0))
32− else if (x == '+') then map fromInteger (parseIntegerAux (unpack xs) 0)
40+ then map fromInteger (parseIntegerAux (unpack xs) (cast {from=Int} 0))
33− else map fromInteger (parseIntegerAux (unpack xs) (ord x - ord '0')) where
41+ else map fromInteger (parseIntegerAux (unpack xs) (cast (ord x - ord '0')))
34− parseIntegerAux : (List Char) -> Int -> Maybe Integer
43+ parseIntegerAux : (List Char) -> Integer -> Maybe Integer
35− parseIntegerAux [] acc = Just (cast acc)
44+ parseIntegerAux [] acc = Just acc
45+ parseIntegerAux (c :: cs) acc =
46+ if (c >= '0' && c <= '9')
36− parseIntegerAux (c :: cs) acc = if (c >= '0' && c <= '9') then parseIntegerAux cs ((acc * 10) + (ord c) - (ord '0'))
47+ then parseIntegerAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
37− else Nothing
48+ else Nothing