groot-0.0.1.0: src/Groot/Data/Text.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Groot.Data.Text
Description : Generic text manipulation module
Copyright : A. Alonso Dominguez (c) 2017, http://github.com/alonsodomin
License : Apache 2.0
Maintainer : A. Alonso Dominguez <alonso.domin (λ) google>
Stability : experimental
Portability : portable
This module aggregates the main text manipulation functionality needed
in Groot to operate.
-}
module Groot.Data.Text
(
module Network.AWS.Data.Text
, module Groot.Data.Text.Display
, module Groot.Data.Text.Styled
, uuid
, subparser
) where
import Data.Attoparsec.Text
import Data.Text (Text)
import qualified Data.Text as T
import Data.UUID (UUID)
import qualified Data.UUID as UUID
import Network.AWS.Data.Text hiding (takeText)
import Groot.Data.Text.Display
import Groot.Data.Text.Styled
-- |Text parser for 'UUID's
uuid :: Parser UUID
uuid = do
input <- takeText
case (UUID.fromText input) of
Nothing -> fromTextError $ T.append "Invalid UUID: " input
Just x -> return x
-- |Utility to compose text parsers
subparser :: FromText a => Text -> Parser a
subparser input = either (fromTextError . T.pack) return $ parseOnly parser input