module Parse where
import Data.List.Split (splitOn)
import Parse.Internal.Parse
parse :: ParseTuple a => String -> String -> a
parse :: String -> String -> a
parse String
format String
str =
case String -> String -> Either String a
forall a. ParseTuple a => String -> String -> Either String a
parseTuple String
format String
str of
Left String
err -> String -> a
forall a. HasCallStack => String -> a
error String
err
Right a
x -> a
x
parseMaybe :: ParseTuple a => String -> String -> Maybe a
parseMaybe :: String -> String -> Maybe a
parseMaybe String
format String
str =
case String -> String -> Either String a
forall a. ParseTuple a => String -> String -> Either String a
parseTuple String
format String
str of
Left String
_ -> Maybe a
forall a. Maybe a
Nothing
Right a
x -> a -> Maybe a
forall a. a -> Maybe a
Just a
x
parseEither :: ParseTuple a => String -> String -> Either String a
parseEither :: String -> String -> Either String a
parseEither = String -> String -> Either String a
forall a. ParseTuple a => String -> String -> Either String a
parseTuple
parseList :: String -> String -> [String]
parseList :: String -> String -> [String]
parseList String
format String
str =
case String -> String -> Either String [String]
parseListEither String
format String
str of
Left String
err -> String -> [String]
forall a. HasCallStack => String -> a
error String
err
Right [String]
x -> [String]
x
parseListMaybe :: String -> String -> Maybe [String]
parseListMaybe :: String -> String -> Maybe [String]
parseListMaybe String
format String
str =
case String -> String -> Either String [String]
parseListEither String
format String
str of
Left String
_ -> Maybe [String]
forall a. Maybe a
Nothing
Right [String]
x -> [String] -> Maybe [String]
forall a. a -> Maybe a
Just [String]
x
parseListEither :: String -> String -> Either String [String]
parseListEither :: String -> String -> Either String [String]
parseListEither String
format = [String] -> String -> Either String [String]
parseParts (String -> String -> [String]
forall a. Eq a => [a] -> [a] -> [[a]]
splitOn String
"{}" String
format)