module Text.Cassette.Number where
import Control.Category ((.))
import Control.Lens qualified as Lens
import Prelude hiding ((.))
import Text.Cassette.Char
import Text.Cassette.Combinator
import Text.Cassette.Lead
import Text.Cassette.Prim
int :: PP Int
int :: PP Int
int =
K7 Tr (String -> r) (Int -> r)
forall {r}. K7 Tr (String -> r) (Int -> r)
intL K7 Tr (String -> r) (Int -> r)
-> K7 Tr r (String -> r) -> K7 Tr r (Int -> r)
forall (p :: * -> * -> *) b c a.
Category p =>
K7 p b c -> K7 p a b -> K7 p a c
--> PP Char -> PP String
forall a. PP a -> PP [a]
some K7 Tr r (Char -> r)
PP Char
digit K7 Tr r (Int -> r) -> K7 Tr r (Int -> r) -> K7 Tr r (Int -> r)
forall a. Semigroup a => a -> a -> a
<>
K7 Tr (String -> r) (Int -> r)
forall {r}. K7 Tr (String -> r) (Int -> r)
intL K7 Tr (String -> r) (Int -> r)
-> K7 Tr r (String -> r) -> K7 Tr r (Int -> r)
forall (p :: * -> * -> *) b c a.
Category p =>
K7 p b c -> K7 p a b -> K7 p a c
--> K7 Tr (Char -> String -> r) (String -> r)
forall a r. K7 Tr (a -> [a] -> r) ([a] -> r)
consL K7 Tr (Char -> String -> r) (String -> r)
-> K7 Tr r (Char -> String -> r) -> K7 Tr r (String -> r)
forall (p :: * -> * -> *) b c a.
Category p =>
K7 p b c -> K7 p a b -> K7 p a c
--> (Char -> Bool) -> PP Char
satisfy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') K7 Tr (String -> r) (Char -> String -> r)
-> K7 Tr r (String -> r) -> K7 Tr r (Char -> String -> r)
forall b c a. K7 Tr b c -> K7 Tr a b -> K7 Tr a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. PP Char -> PP String
forall a. PP a -> PP [a]
some K7 Tr r (Char -> r)
PP Char
digit
where
intL :: K7 Tr (String -> r) (Int -> r)
intL = Iso Int Int String String
-> forall {r}. K7 Tr (String -> r) (Int -> r)
forall s a. Iso s s a a -> UnL s a
isoL ((Int -> String) -> (String -> Int) -> Iso Int Int String String
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
Lens.iso Int -> String
forall a. Show a => a -> String
show String -> Int
forall a. Read a => String -> a
read)