module Data.Internal.Wkt.GeometryCollection ( geometryCollection , emptyGeometryCollection ) where import Control.Applicative ((<|>)) import qualified Data.Geospatial as Geospatial import qualified Data.Sequence as Sequence import qualified Text.Trifecta as Trifecta import qualified Data.Internal.Wkt.Common as Wkt import qualified Data.Internal.Wkt.Line as Line import qualified Data.Internal.Wkt.Point as Point import qualified Data.Internal.Wkt.Polygon as Polygon geometryCollection :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) geometryCollection :: Parser (Seq GeospatialGeometry) geometryCollection = do String _ <- String -> Parser String forall (m :: * -> *). CharParsing m => String -> m String Trifecta.string String "geometrycollection" () _ <- Parser () forall (m :: * -> *). CharParsing m => m () Trifecta.spaces Parser (Seq GeospatialGeometry) forall a. Parser (Seq a) Wkt.emptySet Parser (Seq GeospatialGeometry) -> Parser (Seq GeospatialGeometry) -> Parser (Seq GeospatialGeometry) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Parser (Seq GeospatialGeometry) bracketedAll bracketedAll :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) bracketedAll :: Parser (Seq GeospatialGeometry) bracketedAll = do () _ <- Char -> Parser Char forall (m :: * -> *). CharParsing m => Char -> m Char Trifecta.char Char '(' Parser Char -> Parser () -> Parser () forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> Parser () forall (m :: * -> *). CharParsing m => m () Trifecta.spaces Seq GeospatialGeometry x <- Parser (Seq GeospatialGeometry) parseAll Char _ <- Parser () forall (m :: * -> *). CharParsing m => m () Trifecta.spaces Parser () -> Parser Char -> Parser Char forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> Char -> Parser Char forall (m :: * -> *). CharParsing m => Char -> m Char Trifecta.char Char ')' Seq GeospatialGeometry -> Parser (Seq GeospatialGeometry) forall (f :: * -> *) a. Applicative f => a -> f a pure Seq GeospatialGeometry x parseAll :: Trifecta.Parser (Sequence.Seq Geospatial.GeospatialGeometry) parseAll :: Parser (Seq GeospatialGeometry) parseAll = do let single :: Parser GeospatialGeometry single = GeoPoint -> GeospatialGeometry Geospatial.Point (GeoPoint -> GeospatialGeometry) -> Parser GeoPoint -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoPoint Point.point Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> GeoLine -> GeospatialGeometry Geospatial.Line (GeoLine -> GeospatialGeometry) -> Parser GeoLine -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoLine Line.lineString Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> GeoPolygon -> GeospatialGeometry Geospatial.Polygon (GeoPolygon -> GeospatialGeometry) -> Parser GeoPolygon -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoPolygon Polygon.polygon multi :: Parser GeospatialGeometry multi = GeoMultiPoint -> GeospatialGeometry Geospatial.MultiPoint (GeoMultiPoint -> GeospatialGeometry) -> Parser GeoMultiPoint -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoMultiPoint Point.multiPoint Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> GeoMultiLine -> GeospatialGeometry Geospatial.MultiLine (GeoMultiLine -> GeospatialGeometry) -> Parser GeoMultiLine -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoMultiLine Line.multiLineString Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> GeoMultiPolygon -> GeospatialGeometry Geospatial.MultiPolygon (GeoMultiPolygon -> GeospatialGeometry) -> Parser GeoMultiPolygon -> Parser GeospatialGeometry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Parser GeoMultiPolygon Polygon.multiPolygon GeospatialGeometry x <- Parser GeospatialGeometry single Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Parser GeospatialGeometry multi [GeospatialGeometry] xs <- Parser GeospatialGeometry -> Parser [GeospatialGeometry] forall (f :: * -> *) a. Alternative f => f a -> f [a] Trifecta.many (Char -> Parser Char forall (m :: * -> *). CharParsing m => Char -> m Char Trifecta.char Char ',' Parser Char -> Parser () -> Parser () forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> Parser () forall (m :: * -> *). CharParsing m => m () Trifecta.spaces Parser () -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> (Parser GeospatialGeometry single Parser GeospatialGeometry -> Parser GeospatialGeometry -> Parser GeospatialGeometry forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Parser GeospatialGeometry multi)) Seq GeospatialGeometry -> Parser (Seq GeospatialGeometry) forall (f :: * -> *) a. Applicative f => a -> f a pure (Seq GeospatialGeometry -> Parser (Seq GeospatialGeometry)) -> Seq GeospatialGeometry -> Parser (Seq GeospatialGeometry) forall a b. (a -> b) -> a -> b $ GeospatialGeometry x GeospatialGeometry -> Seq GeospatialGeometry -> Seq GeospatialGeometry forall a. a -> Seq a -> Seq a Sequence.:<| [GeospatialGeometry] -> Seq GeospatialGeometry forall a. [a] -> Seq a Sequence.fromList [GeospatialGeometry] xs emptyGeometryCollection :: Sequence.Seq Geospatial.GeospatialGeometry emptyGeometryCollection :: Seq GeospatialGeometry emptyGeometryCollection = Seq GeospatialGeometry forall a. Seq a Sequence.empty