{-# LANGUAGE OverloadedStrings#-}
module Data.WKT.Helpers (module Data.WKT.Helpers) where
import Data.Maybe (isJust)
import Data.Text (Text)
import Data.Attoparsec.Text (Parser, skipSpace)
import Control.Applicative ((<|>))
generateZMString :: Maybe a -> Maybe a -> Text
generateZMString :: forall a. Maybe a -> Maybe a -> Text
generateZMString Maybe a
z' Maybe a
m'
|Maybe a -> Bool
forall a. Maybe a -> Bool
isJust Maybe a
z' Bool -> Bool -> Bool
&& Maybe a -> Bool
forall a. Maybe a -> Bool
isJust Maybe a
m' = Text
" ZM "
|Maybe a -> Bool
forall a. Maybe a -> Bool
isJust Maybe a
z' = Text
" Z "
|Maybe a -> Bool
forall a. Maybe a -> Bool
isJust Maybe a
m' = Text
" M "
|Bool
otherwise = Text
" "
showP :: Show a => a -> String
showP :: forall a. Show a => a -> String
showP = (String
"(" String -> String -> String
forall a. Semigroup a => a -> a -> a
<>) (String -> String) -> (a -> String) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
")") (String -> String) -> (a -> String) -> a -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show
allPairs :: [a] -> [(a,a)]
allPairs :: forall a. [a] -> [(a, a)]
allPairs [] = []
allPairs [a
_] = []
allPairs (a
x1:a
x2:[a]
xs) = (a
x1,a
x2) (a, a) -> [(a, a)] -> [(a, a)]
forall a. a -> [a] -> [a]
: [a] -> [(a, a)]
forall a. [a] -> [(a, a)]
allPairs (a
x2a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
xs)
zmParser :: Parser (Text, Text)
zmParser :: Parser (Text, Text)
zmParser = do
Parser ()
skipSpace
Text
zFlag <- Parser Text Text
"Z" Parser Text Text -> Parser Text Text -> Parser Text Text
forall a. Parser Text a -> Parser Text a -> Parser Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Text
"z" Parser Text Text -> Parser Text Text -> Parser Text Text
forall a. Parser Text a -> Parser Text a -> Parser Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Text
""
Text
mFlag <- Parser Text Text
"M" Parser Text Text -> Parser Text Text -> Parser Text Text
forall a. Parser Text a -> Parser Text a -> Parser Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Text
"m" Parser Text Text -> Parser Text Text -> Parser Text Text
forall a. Parser Text a -> Parser Text a -> Parser Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Text Text
""
Parser ()
skipSpace
(Text, Text) -> Parser (Text, Text)
forall a. a -> Parser Text a
forall (m :: * -> *) a. Monad m => a -> m a
return (Text
zFlag, Text
mFlag)