@@ -4,46 +4,50 @@ module Data.String
44|||
55||| ```idris example
66||| parsePositive "123"
7+||| ```idris example
78||| parsePositive {a=Int} " +123"
89||| ```
910parsePositive : Num a => String -> Maybe a
10−parsePositive s = parsePosTrimmed (trim s) where
11− parsePosTrimmed s with (strM s)
12− parsePosTrimmed "" | StrNil = Nothing
13− parsePosTrimmed (strCons x xs) | (StrCons x xs) =
14− if (x == '+')
15− then map fromInteger (parsePosAux (unpack xs) (cast {from=Int} 0))
16− else map fromInteger (parsePosAux (unpack xs) (cast (ord x - ord '0')))
17− where
18− parsePosAux : (List Char) -> Integer -> Maybe Integer
19− parsePosAux [] acc = Just acc
20− parsePosAux (c :: cs) acc =
21− if (c >= '0' && c <= '9')
22− then parsePosAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
23− else Nothing
11+parsePositive s = parsePosTrimmed (trim s)
12+ where
13+ parsePosTrimmed s with (strM s)
14+ parsePosTrimmed "" | StrNil = Nothing
15+ parsePosTrimmed (strCons x xs) | (StrCons x xs) =
16+ if (x == '+')
17+ then map fromInteger (parsePosAux (unpack xs) 0)
18+ else map fromInteger (parsePosAux (unpack xs) (cast (ord x - ord '0')))
19+ where
20+ parsePosAux : List Char -> Integer -> Maybe Integer
21+ parsePosAux [] acc = Just acc
22+ parsePosAux (c :: cs) acc =
23+ if (c >= '0' && c <= '9')
24+ then parsePosAux cs ((acc * 10) + (cast ((ord c) - (ord '0'))))
25+ else Nothing
2426
2527
2628||| Convert a number string to a Num.
2729|||
2830||| ```idris example
2931||| parseInteger " 123"
32+||| ```
33+||| ```idris example
3034||| parseInteger {a=Int} " -123"
3135||| ```
3236parseInteger : (Num a, Neg a) => String -> Maybe a
33−parseInteger s = parseIntTrimmed (trim s) where
34− parseIntTrimmed s with (strM s)
35− parseIntTrimmed "" | StrNil = Nothing
36− parseIntTrimmed (strCons x xs) | (StrCons x xs) =
37− if (x == '-')
38− then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) (cast {from=Int} 0))
39− else if (x == '+')
40− then map fromInteger (parseIntegerAux (unpack xs) (cast {from=Int} 0))
41− else map fromInteger (parseIntegerAux (unpack xs) (cast (ord x - ord '0')))
42− where
43− parseIntegerAux : (List Char) -> Integer -> Maybe Integer
44− parseIntegerAux [] acc = Just acc
45− parseIntegerAux (c :: cs) acc =
46− if (c >= '0' && c <= '9')
47− then parseIntegerAux cs ((acc * (cast {from=Int} 10)) + (cast ((ord c) - (ord '0'))))
48− else Nothing
49−
37+parseInteger s = parseIntTrimmed (trim s)
38+ where
39+ parseIntTrimmed s with (strM s)
40+ parseIntTrimmed "" | StrNil = Nothing
41+ parseIntTrimmed (strCons x xs) | (StrCons x xs) =
42+ if (x == '-')
43+ then map (\y => negate (fromInteger y)) (parseIntegerAux (unpack xs) 0)
44+ else if (x == '+')
45+ then map fromInteger (parseIntegerAux (unpack xs) (cast {from=Int} 0))
46+ else map fromInteger (parseIntegerAux (unpack xs) (cast (ord x - ord '0')))
47+ where
48+ parseIntegerAux : List Char -> Integer -> Maybe Integer
49+ parseIntegerAux [] acc = Just acc
50+ parseIntegerAux (c :: cs) acc =
51+ if (c >= '0' && c <= '9')
52+ then parseIntegerAux cs ((acc * 10) + (cast ((ord c) - (ord '0'))))
53+ else Nothing