HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulestreamly-core-0.2.2Haskell2010

Streamly.Internal.Unicode.Parser

To parse a text input, use the decode routines from Streamly.Unicode.Stream module to convert an input byte stream to a Unicode Char stream and then use these parsers on the Char stream.

  • 32 values

Setup

0 declarations

To execute the code examples provided in this module in ghci, please run the following commands first.

Example3 expressions
:mimport qualified Streamly.Data.Stream as Streamimport qualified Streamly.Unicode.Parser as Unicode

For APIs that have not been released yet.

Example1 expression
import qualified Streamly.Internal.Unicode.Parser as Unicode (number, mkDouble)

Generic

2 declarations

Sequences

4 declarations

Classes

19 declarations

Numeric

6 declarations
valuenumber :: Monad m => Parser Char m (Integer, Int)
#

A generic parser for scientific notation of numbers. Returns (mantissa, exponent) tuple. The result can be mapped to Double or any other number representation e.g. Scientific.

For example, using the scientific package: >> parserScientific = uncurry Data.Scientific.scientific $ number

valuedoubleParser :: Monad m => Parser Char m (Int, Int)
#

A fast, custom parser for double precision flaoting point numbers. Returns (mantissa, exponent) tuple. This is much faster than number because it assumes the number will fit in a Double type and uses Int representation to store mantissa.

Number larger than Double may overflow. Int overflow is not checked in the exponent.

valuedouble :: Monad m => Parser Char m Double
#

Parse a decimal Double value. This parser accepts an optional sign (+ or -) followed by at least one decimal digit. Decimal digits are optionally followed by a decimal point and at least one decimal digit after the point. This parser accepts the maximal valid input as long as it gives a valid number. Specifcally a trailing decimal point is allowed but not consumed. This function does not accept "NaN" or "Infinity" string representations of double values.

Definition:

Example1 expression
double = uncurry Unicode.mkDouble <$> Unicode.number

Examples:

Example1 expression
p = Stream.parse Unicode.double . Stream.fromList
Example1 expression
p "-1.23e-123"Right (-1.23e-123)

Trailing input examples:

Example1 expression
p "1."Right 1.0
Example1 expression
p "1.2.3"Right 1.2
Example1 expression
p "1e"Right 1.0
Example1 expression
p "1e2.3"Right 100.0
Example1 expression
p "1+2"Right 1.0

Error cases:

Example1 expression
p ""Left (ParseError "number: expecting sign or decimal digit, got end of input")
Example1 expression
p ".1"Left (ParseError "number: expecting sign or decimal digit, got '.'")
Example1 expression
p "+"Left (ParseError "number: expecting decimal digit, got end of input")
valuehexadecimal :: (Monad m, Integral a, Bits a) => Parser Char m a
#

Parse and decode an unsigned integral hexadecimal number. The hex digits 'a' through 'f' may be upper or lower case.

Note: This parser does not accept a leading "0x" string.

Utilities

1 declaration
valuemkDouble :: Integer -> Int -> Double
#

mkDouble mantissa exponent converts a mantissa and exponent to a Double value equivalent to mantissa * 10^exponent. It does not check for overflow, powers more than 308 will overflow.