xsd 0.6.1 → 0.6.2
raw patch · 3 files changed
+40/−8 lines, 3 files
Files
- changelog.md +3/−0
- src/Text/XML/XSD/DateTime.hs +36/−7
- xsd.cabal +1/−1
changelog.md view
@@ -1,3 +1,6 @@+0.6.2 (2021)+ * Add more string-like instances.+ 0.6.1 (2021) * Add classy optics.
src/Text/XML/XSD/DateTime.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DefaultSignatures #-}+{-# LANGUAGE FlexibleInstances #-} -- | XSD @dateTime@ data structure <http://www.w3.org/TR/xmlschema-2/#dateTime> module Text.XML.XSD.DateTime@@ -20,22 +21,34 @@ import Control.Applicative (pure, (<$>), (*>), (<|>)) import Control.Monad (Monad(..), when) import Control.Lens+ ( view,+ iso,+ prism',+ review,+ Iso',+ Lens',+ Prism',+ Traversal',+ Traversal1' ) import Data.Bool ( Bool(False, True), (&&), (||) )-import Data.Char (ord)+import Data.Char (Char, ord) import Data.Either(Either(..), either) import Data.Eq ( Eq(..) ) import Data.Fixed (Pico, showFixed) import Data.Function((.), id, ($), const)+import Data.Functor((<$)) import Data.Functor.Apply(WrappedApplicative(WrapApplicative, unwrapApplicative)) import Data.Int ( Int ) import Data.Maybe (Maybe(Nothing, Just)) import Data.Ord ( Ord((>), (<)) ) import Data.Text(Text)-import Data.Text.Lazy as TL(toStrict)+import qualified Data.Text.Lazy as TL(Text, toStrict) import Data.Text.Lazy.Builder(Builder, toLazyText, fromString) import Data.Text.Lazy.Builder.Int (decimal)+import Data.Text.Lens ( unpacked, IsText(packed) ) import qualified Data.Text.Read as TR(decimal) import Data.Semigroup ((<>))+import Data.String(String) import Data.Time ( addDays, fromGregorian,@@ -267,7 +280,7 @@ DateTime -> Text toText =- toStrict . toLazyText . dtBuilder+ TL.toStrict . toLazyText . dtBuilder where dtBuilder (DtZoned uTime) = ltBuilder (utcToLocalTime utc uTime) <> "Z" dtBuilder (DtUnzoned lTime) = ltBuilder lTime@@ -286,6 +299,22 @@ <> buildSeconds sss in prism' toText (either (const Nothing) Just . parse (parseDateTime <|> fail "bad date time") "DateTime") +instance ManyDateTime TL.Text where+ _DateTime_ =+ _DateTime++instance AsDateTime TL.Text where+ _DateTime =+ unpacked . (packed :: Iso' String Text) . _DateTime++instance ManyDateTime [Char] where+ _DateTime_ =+ _DateTime++instance AsDateTime [Char] where+ _DateTime =+ (packed :: Iso' String Text) . _DateTime+ buildSeconds :: Pico -> Builder@@ -323,11 +352,11 @@ (Monad p, CharParsing p) => p (Maybe Pico) parseOffset =- (eof *> pure Nothing)+ (Nothing <$ eof) <|>- (char 'Z' *> pure (Just 0))+ (Just 0 <$ char 'Z') <|>- (do sign <- (char '+' *> pure 1) <|> (char '-' *> pure (-1))+ (do sign <- (1 <$ char '+') <|> ((-1) <$ char '-') hh <- fromIntegral <$> p2imax 14 _ <- char ':' mm <- fromIntegral <$> p2imax (if hh == 14 then 0 else 59)@@ -345,7 +374,7 @@ c == x lengthGT4_c1 _ _ = False- in do sign <- (char '-' *> pure (-1)) <|> pure 1+ in do sign <- ((-1) <$ char '-') <|> pure 1 ds <- many digit when (lengthLT4 ds) $ fail "need at least four digits in year"
xsd.cabal view
@@ -1,5 +1,5 @@ name: xsd-version: 0.6.1+version: 0.6.2 license: BSD3 license-file: LICENCE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>