module Text.ParserCombinators.Parsec.Number where
import Text.ParserCombinators.Parsec
import Data.Char (digitToInt)
import Control.Monad (liftM, ap)
floating :: Floating f => CharParser st f
floating :: forall f st. Floating f => CharParser st f
floating = do
Integer
n <- forall i st. Integral i => CharParser st i
decimal
forall f st. Floating f => Integer -> CharParser st f
fractExponent Integer
n
floating2 :: Floating f => Bool -> CharParser st f
floating2 :: forall f st. Floating f => Bool -> CharParser st f
floating2 = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. Num a => Integer -> a
fromInteger forall a. a -> a
id) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i f st.
(Integral i, Floating f) =>
Bool -> CharParser st (Either i f)
decFloat
floating3 :: Floating f => Bool -> CharParser st f
floating3 :: forall f st. Floating f => Bool -> CharParser st f
floating3 Bool
b = forall f st.
Floating f =>
f -> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractAndExp f
0 (forall f st. Fractional f => Bool -> CharParser st f
fraction Bool
True) forall f st. Floating f => CharParser st (f -> f)
exponentFactor forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall f st. Floating f => Bool -> CharParser st f
floating2 Bool
b
decimalFloat :: (Integral i, Floating f) => CharParser st (Either i f)
decimalFloat :: forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
decimalFloat = forall i f st.
(Integral i, Floating f) =>
Bool -> CharParser st (Either i f)
decFloat Bool
True
decFloat :: (Integral i, Floating f) => Bool -> CharParser st (Either i f)
decFloat :: forall i f st.
(Integral i, Floating f) =>
Bool -> CharParser st (Either i f)
decFloat Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
decimal
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st. Floating f => Integer -> Bool -> CharParser st f
fractExp (forall a. Integral a => a -> Integer
toInteger i
n) Bool
b
hexFloat :: (Integral i, Floating f) => Bool -> CharParser st (Either i f)
hexFloat :: forall i f st.
(Integral i, Floating f) =>
Bool -> CharParser st (Either i f)
hexFloat Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
hexnum
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st. Floating f => Integer -> Bool -> CharParser st f
hexFractExp (forall a. Integral a => a -> Integer
toInteger i
n) Bool
b
binFloat :: (Integral i, Floating f) => Bool -> CharParser st (Either i f)
binFloat :: forall i f st.
(Integral i, Floating f) =>
Bool -> CharParser st (Either i f)
binFloat Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
binary
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st. Floating f => Integer -> Bool -> CharParser st f
binFractExp (forall a. Integral a => a -> Integer
toInteger i
n) Bool
b
natFloat :: (Integral i, Floating f) => CharParser st (Either i f)
natFloat :: forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
natFloat = (forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'0' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
zeroNumFloat) forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
decimalFloat
zeroNumFloat :: (Integral i, Floating f) => CharParser st (Either i f)
zeroNumFloat :: forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
zeroNumFloat =
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. a -> Either a b
Left forall i st. Integral i => CharParser st i
hexOrOct
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i f st.
(Integral i, Floating f) =>
CharParser st (Either i f)
decimalFloat
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right (forall f st. Floating f => Integer -> CharParser st f
fractExponent Integer
0)
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a. Monad m => a -> m a
return (forall a b. a -> Either a b
Left i
0)
fractExponent :: Floating f => Integer -> CharParser st f
fractExponent :: forall f st. Floating f => Integer -> CharParser st f
fractExponent Integer
i = forall f st. Floating f => Integer -> Bool -> CharParser st f
fractExp Integer
i Bool
True
hexFractExp :: Floating f => Integer -> Bool -> CharParser st f
hexFractExp :: forall f st. Floating f => Integer -> Bool -> CharParser st f
hexFractExp Integer
i Bool
b = forall f st.
Floating f =>
Integer
-> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractExp Integer
i (forall f st. Fractional f => Bool -> CharParser st f
hexFraction Bool
b) forall f st. Floating f => CharParser st (f -> f)
hexExponentFactor
binFractExp :: Floating f => Integer -> Bool -> CharParser st f
binFractExp :: forall f st. Floating f => Integer -> Bool -> CharParser st f
binFractExp Integer
i Bool
b = forall f st.
Floating f =>
Integer
-> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractExp Integer
i (forall f st. Fractional f => Bool -> CharParser st f
binFraction Bool
b) forall f st. Floating f => CharParser st (f -> f)
hexExponentFactor
fractExp :: Floating f => Integer -> Bool -> CharParser st f
fractExp :: forall f st. Floating f => Integer -> Bool -> CharParser st f
fractExp Integer
i Bool
b = forall f st.
Floating f =>
Integer
-> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractExp Integer
i (forall f st. Fractional f => Bool -> CharParser st f
fraction Bool
b) forall f st. Floating f => CharParser st (f -> f)
exponentFactor
genFractExp :: Floating f => Integer -> CharParser st f
-> CharParser st (f -> f) -> CharParser st f
genFractExp :: forall f st.
Floating f =>
Integer
-> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractExp Integer
i CharParser st f
frac CharParser st (f -> f)
expo = case forall a. Num a => Integer -> a
fromInteger Integer
i of
f
f -> forall f st.
Floating f =>
f -> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractAndExp f
f CharParser st f
frac CharParser st (f -> f)
expo forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a b. (a -> b) -> a -> b
$ f
f) CharParser st (f -> f)
expo
genFractAndExp :: Floating f => f -> CharParser st f
-> CharParser st (f -> f) -> CharParser st f
genFractAndExp :: forall f st.
Floating f =>
f -> CharParser st f -> CharParser st (f -> f) -> CharParser st f
genFractAndExp f
f CharParser st f
frac = forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap (forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. (f
f forall a. Num a => a -> a -> a
+)) CharParser st f
frac) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option forall a. a -> a
id
exponentFactor :: Floating f => CharParser st (f -> f)
exponentFactor :: forall f st. Floating f => CharParser st (f -> f)
exponentFactor = forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"eE" forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall f st. Floating f => Int -> CharParser st (f -> f)
extExponentFactor Int
10 forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"exponent"
hexExponentFactor :: Floating f => CharParser st (f -> f)
hexExponentFactor :: forall f st. Floating f => CharParser st (f -> f)
hexExponentFactor = forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"pP" forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall f st. Floating f => Int -> CharParser st (f -> f)
extExponentFactor Int
2 forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"hex-exponent"
extExponentFactor :: Floating f => Int -> CharParser st (f -> f)
extExponentFactor :: forall f st. Floating f => Int -> CharParser st (f -> f)
extExponentFactor Int
base =
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. Num a => a -> a -> a
(*) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f. Floating f => Int -> Integer -> f
exponentValue Int
base) (forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap forall a st. Num a => CharParser st (a -> a)
sign (forall i st. Integral i => CharParser st i
decimal forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"exponent"))
exponentValue :: Floating f => Int -> Integer -> f
exponentValue :: forall f. Floating f => Int -> Integer -> f
exponentValue Int
base = (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
base forall a. Floating a => a -> a -> a
**) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Num a => Integer -> a
fromInteger
fractional :: Fractional f => CharParser st f
fractional :: forall f st. Fractional f => CharParser st f
fractional = do
Integer
n <- forall i st. Integral i => CharParser st i
decimal
forall f st. Fractional f => Integer -> Bool -> CharParser st f
fractFract Integer
n Bool
True
fractional2 :: Fractional f => Bool -> CharParser st f
fractional2 :: forall f st. Fractional f => Bool -> CharParser st f
fractional2 = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. Num a => Integer -> a
fromInteger forall a. a -> a
id) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i f st.
(Integral i, Fractional f) =>
Bool -> CharParser st (Either i f)
decFract
fractional3 :: Fractional f => Bool -> CharParser st f
fractional3 :: forall f st. Fractional f => Bool -> CharParser st f
fractional3 Bool
b = forall f st. Fractional f => Integer -> Bool -> CharParser st f
fractFract Integer
0 Bool
True forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall f st. Fractional f => Bool -> CharParser st f
fractional2 Bool
b
decFract :: (Integral i, Fractional f) => Bool -> CharParser st (Either i f)
decFract :: forall i f st.
(Integral i, Fractional f) =>
Bool -> CharParser st (Either i f)
decFract Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
decimal
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st. Fractional f => Integer -> Bool -> CharParser st f
fractFract (forall a. Integral a => a -> Integer
toInteger i
n) Bool
b
hexFract :: (Integral i, Fractional f) => Bool -> CharParser st (Either i f)
hexFract :: forall i f st.
(Integral i, Fractional f) =>
Bool -> CharParser st (Either i f)
hexFract Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
hexnum
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st.
Fractional f =>
Integer -> CharParser st f -> CharParser st f
genFractFract (forall a. Integral a => a -> Integer
toInteger i
n) forall a b. (a -> b) -> a -> b
$ forall f st. Fractional f => Bool -> CharParser st f
hexFraction Bool
b
binFract :: (Integral i, Fractional f) => Bool -> CharParser st (Either i f)
binFract :: forall i f st.
(Integral i, Fractional f) =>
Bool -> CharParser st (Either i f)
binFract Bool
b = do
i
n <- forall i st. Integral i => CharParser st i
binary
forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option (forall a b. a -> Either a b
Left i
n) forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall f st.
Fractional f =>
Integer -> CharParser st f -> CharParser st f
genFractFract (forall a. Integral a => a -> Integer
toInteger i
n) forall a b. (a -> b) -> a -> b
$ forall f st. Fractional f => Bool -> CharParser st f
binFraction Bool
b
decimalFract :: (Integral i, Fractional f) => CharParser st (Either i f)
decimalFract :: forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
decimalFract = forall i f st.
(Integral i, Fractional f) =>
Bool -> CharParser st (Either i f)
decFract Bool
True
natFract :: (Integral i, Fractional f) => CharParser st (Either i f)
natFract :: forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
natFract = (forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'0' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
zeroNumFract) forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
decimalFract
zeroNumFract :: (Integral i, Fractional f) => CharParser st (Either i f)
zeroNumFract :: forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
zeroNumFract =
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. a -> Either a b
Left forall i st. Integral i => CharParser st i
hexOrOct
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i f st.
(Integral i, Fractional f) =>
CharParser st (Either i f)
decimalFract
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM forall a b. b -> Either a b
Right (forall f st. Fractional f => Integer -> Bool -> CharParser st f
fractFract Integer
0 Bool
True)
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a. Monad m => a -> m a
return (forall a b. a -> Either a b
Left i
0)
fractFract :: Fractional f => Integer -> Bool -> CharParser st f
fractFract :: forall f st. Fractional f => Integer -> Bool -> CharParser st f
fractFract Integer
i = forall f st.
Fractional f =>
Integer -> CharParser st f -> CharParser st f
genFractFract Integer
i forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall f st. Fractional f => Bool -> CharParser st f
fraction
genFractFract :: Fractional f => Integer -> CharParser st f -> CharParser st f
genFractFract :: forall f st.
Fractional f =>
Integer -> CharParser st f -> CharParser st f
genFractFract Integer
i = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall a. Num a => Integer -> a
fromInteger Integer
i forall a. Num a => a -> a -> a
+)
fraction :: Fractional f => Bool -> CharParser st f
fraction :: forall f st. Fractional f => Bool -> CharParser st f
fraction Bool
b = forall f st.
Fractional f =>
Bool -> Int -> CharParser st Char -> CharParser st f
baseFraction Bool
b Int
10 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
hexFraction :: Fractional f => Bool -> CharParser st f
hexFraction :: forall f st. Fractional f => Bool -> CharParser st f
hexFraction Bool
b = forall f st.
Fractional f =>
Bool -> Int -> CharParser st Char -> CharParser st f
baseFraction Bool
b Int
16 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
hexDigit
binFraction :: Fractional f => Bool -> CharParser st f
binFraction :: forall f st. Fractional f => Bool -> CharParser st f
binFraction Bool
b = forall f st.
Fractional f =>
Bool -> Int -> CharParser st Char -> CharParser st f
baseFraction Bool
b Int
2 forall st. CharParser st Char
binDigit
baseFraction :: Fractional f => Bool -> Int -> CharParser st Char
-> CharParser st f
baseFraction :: forall f st.
Fractional f =>
Bool -> Int -> CharParser st Char -> CharParser st f
baseFraction Bool
requireDigit Int
base CharParser st Char
baseDigit = forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'.' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall f. Fractional f => Int -> [Char] -> f
fractionValue Int
base)
((if Bool
requireDigit then forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 else forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many) CharParser st Char
baseDigit forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"fraction")
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"fraction"
fractionValue :: Fractional f => Int -> String -> f
fractionValue :: forall f. Fractional f => Int -> [Char] -> f
fractionValue Int
base = forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall a. Fractional a => a -> a -> a
(/)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\ (f
s, f
p) Char
d ->
(f
p forall a. Num a => a -> a -> a
* forall a b. (Integral a, Num b) => a -> b
fromIntegral (Char -> Int
digitToInt Char
d) forall a. Num a => a -> a -> a
+ f
s, f
p forall a. Num a => a -> a -> a
* forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
base))
(f
0, f
1) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> Bool) -> [a] -> [a]
dropWhile (forall a. Eq a => a -> a -> Bool
== Char
'0') forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [a] -> [a]
reverse
int :: Integral i => CharParser st i
int :: forall i st. Integral i => CharParser st i
int = forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap forall a st. Num a => CharParser st (a -> a)
sign forall i st. Integral i => CharParser st i
nat
sign :: Num a => CharParser st (a -> a)
sign :: forall a st. Num a => CharParser st (a -> a)
sign = (forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'-' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return forall a. Num a => a -> a
negate) forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> (forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m ()
optional (forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'+') forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return forall a. a -> a
id)
decimal :: Integral i => CharParser st i
decimal :: forall i st. Integral i => CharParser st i
decimal = forall i tok st.
Integral i =>
Int -> GenParser tok st Char -> GenParser tok st i
number Int
10 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
binDigit :: CharParser st Char
binDigit :: forall st. CharParser st Char
binDigit = forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"01"
binary :: Integral i => CharParser st i
binary :: forall i st. Integral i => CharParser st i
binary = forall i tok st.
Integral i =>
Int -> GenParser tok st Char -> GenParser tok st i
number Int
2 forall st. CharParser st Char
binDigit
nat :: Integral i => CharParser st i
nat :: forall i st. Integral i => CharParser st i
nat = forall i st. Integral i => CharParser st i
zeroNumber forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i st. Integral i => CharParser st i
decimal
zeroNumber :: Integral i => CharParser st i
zeroNumber :: forall i st. Integral i => CharParser st i
zeroNumber =
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'0' forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> (forall i st. Integral i => CharParser st i
hexOrOct forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i st. Integral i => CharParser st i
decimal forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall (m :: * -> *) a. Monad m => a -> m a
return i
0) forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
""
hexOrOct :: Integral i => CharParser st i
hexOrOct :: forall i st. Integral i => CharParser st i
hexOrOct = forall i st. Integral i => CharParser st i
hexadecimal forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall i st. Integral i => CharParser st i
octal
hexadecimal :: Integral i => CharParser st i
hexadecimal :: forall i st. Integral i => CharParser st i
hexadecimal = forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"xX" forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall i st. Integral i => CharParser st i
hexnum
hexnum :: Integral i => CharParser st i
hexnum :: forall i st. Integral i => CharParser st i
hexnum = forall i tok st.
Integral i =>
Int -> GenParser tok st Char -> GenParser tok st i
number Int
16 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
hexDigit
octal :: Integral i => CharParser st i
octal :: forall i st. Integral i => CharParser st i
octal = forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m Char
oneOf [Char]
"oO" forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall i tok st.
Integral i =>
Int -> GenParser tok st Char -> GenParser tok st i
number Int
8 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
octDigit
number :: Integral i => Int -> GenParser tok st Char -> GenParser tok st i
number :: forall i tok st.
Integral i =>
Int -> GenParser tok st Char -> GenParser tok st i
number Int
base GenParser tok st Char
baseDigit = do
i
n <- forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (forall i. Integral i => Int -> [Char] -> i
numberValue Int
base) (forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 GenParser tok st Char
baseDigit)
seq :: forall a b. a -> b -> b
seq i
n (forall (m :: * -> *) a. Monad m => a -> m a
return i
n)
numberValue :: Integral i => Int -> String -> i
numberValue :: forall i. Integral i => Int -> [Char] -> i
numberValue Int
base =
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\ i
x -> ((forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
base forall a. Num a => a -> a -> a
* i
x) forall a. Num a => a -> a -> a
+) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Int
digitToInt) i
0