module Data.Internal.Wkt.Common ( emptySet , emptySets , number ) where import Control.Applicative ((<|>)) import qualified Data.Scientific as Scientific import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta emptySet :: Trifecta.Parser (Sequence.Seq a) emptySet = do _ <- Trifecta.string "empty" pure Sequence.empty emptySets :: Trifecta.Parser ([a], [[a]]) emptySets = do _ <- Trifecta.string "empty" pure ([], []) number :: Trifecta.Parser Scientific.Scientific number = do sign <- (Trifecta.char '+' >> pure id) <|> (Trifecta.char '-' >> pure negate) <|> pure id sign . either fromInteger id <$> Trifecta.integerOrScientific