happstack-data 0.4.1 → 0.5.0
raw patch · 5 files changed
+113/−11 lines, 5 filesdep +syb-with-class-instances-textdep +textdep +timedep ~happstack-utilPVP ok
version bump matches the API change (PVP)
Dependencies added: syb-with-class-instances-text, text, time
Dependency ranges changed: happstack-util
API changes (from Hackage documentation)
- Happstack.Data.Default: instance [overlap ok] (Default a) => Default [a]
- Happstack.Data.Proxy: constr[aE35] :: Constr
- Happstack.Data.Proxy: dataType[aE34] :: DataType
- Happstack.Data.Proxy: instance [overlap ok] (Data ctx t[aE33], Sat (ctx (Proxy t[aE33]))) => Data ctx (Proxy t[aE33])
- Happstack.Data.Proxy: instance [overlap ok] (Data t[aE33]) => Data (Proxy t[aE33])
- Happstack.Data.Proxy: instance [overlap ok] (Default t[aE33]) => Default (Proxy t[aE33])
- Happstack.Data.Proxy: instance [overlap ok] Read (Proxy t[aE33])
- Happstack.Data.Proxy: instance [overlap ok] Show (Proxy t[aE33])
- Happstack.Data.Xml: constr[a9cl] :: Constr
- Happstack.Data.Xml: constr[a9cm] :: Constr
- Happstack.Data.Xml: constr[a9cn] :: Constr
- Happstack.Data.Xml: constr[alRD] :: Constr
- Happstack.Data.Xml: constr[alRt] :: Constr
- Happstack.Data.Xml: dataType[a9ck] :: DataType
- Happstack.Data.Xml: dataType[alRC] :: DataType
- Happstack.Data.Xml: dataType[alRs] :: DataType
+ Happstack.Data.Default: instance [overlap ok] (Data DefaultD a) => Default [a]
+ Happstack.Data.Default: instance [overlap ok] Default Text
+ Happstack.Data.Proxy: constr[aoJf] :: Constr
+ Happstack.Data.Proxy: dataType[aoJe] :: DataType
+ Happstack.Data.Proxy: instance [overlap ok] (Data ctx t[aoJd], Sat (ctx (Proxy t[aoJd]))) => Data ctx (Proxy t[aoJd])
+ Happstack.Data.Proxy: instance [overlap ok] (Data t[aoJd]) => Data (Proxy t[aoJd])
+ Happstack.Data.Proxy: instance [overlap ok] (Default t[aoJd]) => Default (Proxy t[aoJd])
+ Happstack.Data.Proxy: instance [overlap ok] Read (Proxy t[aoJd])
+ Happstack.Data.Proxy: instance [overlap ok] Show (Proxy t[aoJd])
+ Happstack.Data.Serialize: instance [overlap ok] (Integral a, Serialize a) => Serialize (Ratio a)
+ Happstack.Data.Serialize: instance [overlap ok] (Typeable a) => Version (Ratio a)
+ Happstack.Data.Serialize: instance [overlap ok] Serialize AbsoluteTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize Day
+ Happstack.Data.Serialize: instance [overlap ok] Serialize DiffTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize LocalTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize NominalDiffTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize Text
+ Happstack.Data.Serialize: instance [overlap ok] Serialize TimeOfDay
+ Happstack.Data.Serialize: instance [overlap ok] Serialize TimeZone
+ Happstack.Data.Serialize: instance [overlap ok] Serialize UTCTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize UniversalTime
+ Happstack.Data.Serialize: instance [overlap ok] Serialize ZonedTime
+ Happstack.Data.Serialize: instance [overlap ok] Version AbsoluteTime
+ Happstack.Data.Serialize: instance [overlap ok] Version Day
+ Happstack.Data.Serialize: instance [overlap ok] Version DiffTime
+ Happstack.Data.Serialize: instance [overlap ok] Version LocalTime
+ Happstack.Data.Serialize: instance [overlap ok] Version NominalDiffTime
+ Happstack.Data.Serialize: instance [overlap ok] Version Text
+ Happstack.Data.Serialize: instance [overlap ok] Version TimeOfDay
+ Happstack.Data.Serialize: instance [overlap ok] Version TimeZone
+ Happstack.Data.Serialize: instance [overlap ok] Version UTCTime
+ Happstack.Data.Serialize: instance [overlap ok] Version UniversalTime
+ Happstack.Data.Serialize: instance [overlap ok] Version ZonedTime
+ Happstack.Data.Xml: constr[a6S9] :: Constr
+ Happstack.Data.Xml: constr[a6Sa] :: Constr
+ Happstack.Data.Xml: constr[a6Sb] :: Constr
+ Happstack.Data.Xml: constr[afJH] :: Constr
+ Happstack.Data.Xml: constr[afJx] :: Constr
+ Happstack.Data.Xml: dataType[a6S8] :: DataType
+ Happstack.Data.Xml: dataType[afJG] :: DataType
+ Happstack.Data.Xml: dataType[afJw] :: DataType
- Happstack.Data.Proxy: Proxy :: Proxy t[aE33]
+ Happstack.Data.Proxy: Proxy :: Proxy t[aoJd]
- Happstack.Data.Proxy: data Proxy t[aE33]
+ Happstack.Data.Proxy: data Proxy t[aoJd]
Files
- happstack-data.cabal +7/−3
- src/Happstack/Data/Default.hs +10/−1
- src/Happstack/Data/Serialize.hs +95/−3
- src/Happstack/Data/Xml/Base.hs +1/−2
- src/Happstack/Data/Xml/Instances.hs +0/−2
happstack-data.cabal view
@@ -1,5 +1,5 @@ Name: happstack-data-Version: 0.4.1+Version: 0.5.0 License: BSD3 License-File: COPYING Author: Happstack team, HAppS LLC@@ -54,11 +54,14 @@ Build-Depends: binary, bytestring, containers,- happstack-util >= 0.4.1 && < 0.5, + happstack-util >= 0.5 && < 0.6, HaXml >= 1.13 && < 1.14, mtl, pretty, syb-with-class >= 0.5,+ syb-with-class-instances-text,+ text >= 0.7.1,+ time >= 1.1.4, template-haskell hs-source-dirs: src@@ -79,6 +82,7 @@ Happstack.Data.Serialize Happstack.Data.SerializeTH if flag(tests)+ Build-depends: HUnit Exposed-modules: Happstack.Data.Tests Happstack.Data.Tests.Xml001@@ -96,7 +100,7 @@ TypeSynonymInstances, PatternGuards, PolymorphicComponents -- Should also have ", DeriveDataTypeable" but Cabal complains- GHC-Options: -Wall+ GHC-Options: -Wall -O0 Executable happstack-data-tests Main-Is: Test.hs
src/Happstack/Data/Default.hs view
@@ -32,11 +32,14 @@ import qualified Data.ByteString.Char8 as BSC import Data.Generics.SYB.WithClass.Basics import Data.Generics.SYB.WithClass.Instances ()+import Data.Generics.SYB.WithClass.Instances.Text () import Data.Int import Data.Word import qualified Data.Map as M import qualified Data.Set as S import Foreign.ForeignPtr+import Data.Text as T+import Data.Text.Lazy as L -- | The 'Default' class provides a 'defaultValue' value, which -- is the default value for that type.@@ -76,7 +79,7 @@ instance Default t => Sat (DefaultD t) where dict = DefaultD { defaultValueD = defaultValue } -instance Default a => Default [a] where+instance Data DefaultD a => Default [a] where defaultValue = [] instance Default Int where defaultValue = 0@@ -114,6 +117,12 @@ instance Default BSC.ByteString where defaultValue = BSC.pack ""+ +instance Default T.Text where+ defaultValue = T.empty+ +instance Default L.Text where+ defaultValue = L.empty -- We don't really want this instance, but we need it for the ByteString -- instance
src/Happstack/Data/Serialize.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE UndecidableInstances, OverlappingInstances, ScopedTypeVariables, GADTs, PatternSignatures,+{-# LANGUAGE UndecidableInstances, OverlappingInstances, ScopedTypeVariables, GADTs, GeneralizedNewtypeDeriving, DeriveDataTypeable #-} module Happstack.Data.Serialize ( Serialize(..), Version(..), Migrate(..), Mode(..), Contained, contain, extension,@@ -9,6 +9,10 @@ import Control.Monad.Identity import Data.Int()+import Data.Ratio ((%), Ratio, denominator, numerator)+import Data.Time (Day(..), DiffTime, LocalTime(..), NominalDiffTime, TimeOfDay(..)+ ,TimeZone(..), UTCTime(..), UniversalTime(..), ZonedTime(..))+import Data.Time.Clock.TAI (AbsoluteTime, taiEpoch, addAbsoluteTime, diffAbsoluteTime) import Foreign import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.ByteString.Char8 as B@@ -17,11 +21,13 @@ import Happstack.Data.Proxy import Data.Typeable-import qualified Data.Map as M import qualified Data.Map as Map import qualified Data.IntMap as IntMap import qualified Data.Set as Set-+import qualified Data.Text as ST+import qualified Data.Text.Encoding as ST+import qualified Data.Text.Lazy as LT+import qualified Data.Text.Lazy.Encoding as LT import Data.Binary as B import Data.Binary.Put as B import Data.Binary.Get as B@@ -190,6 +196,17 @@ instance Version Int64 where mode = Primitive instance Serialize Int64 where getCopy = contain get; putCopy = contain . put+{-+This instance requires base >= 4.2.0.0, which means GHC >= 6.12. We can add this back in when we drop support for GHC 6.10.++instance Version (Fixed a)+instance (Typeable a, HasResolution a) => Serialize (Fixed a) where+ getCopy = contain $ liftM fromRational safeGet ; putCopy = contain . safePut . toRational+-}+instance (Typeable a) => Version (Ratio a)+instance (Integral a, Serialize a) => Serialize (Ratio a) where+ getCopy = contain $ liftM2 (%) safeGet safeGet+ putCopy r = contain $ safePut (numerator r) >> safePut (denominator r) instance Version () where mode = Primitive instance Serialize () where getCopy = contain get; putCopy = contain . put@@ -257,7 +274,82 @@ instance (Serialize a) => Serialize (IntMap.IntMap a) where getCopy = contain $ fmap IntMap.fromAscList safeGet putCopy = contain . safePut . IntMap.toList+ +instance Version ST.Text+instance Serialize ST.Text where+ putCopy = putCopy . ST.encodeUtf8+ getCopy = contain $ fmap ST.decodeUtf8 safeGet+ +instance Version LT.Text+instance Serialize LT.Text where+ putCopy = putCopy . LT.encodeUtf8+ getCopy = contain $ fmap LT.decodeUtf8 safeGet ++-- Data.Time instances+instance Version Day+instance Serialize Day where+ getCopy = contain $ liftM ModifiedJulianDay get ; putCopy = contain . put . toModifiedJulianDay++instance Version UniversalTime+instance Serialize UniversalTime where+ getCopy = contain $ liftM ModJulianDate get ; putCopy = contain . put . getModJulianDate++instance Version UTCTime+instance Serialize UTCTime where+ getCopy = contain $ liftM2 UTCTime safeGet safeGet+ putCopy d = contain $ safePut (utctDay d) >> safePut (utctDayTime d)++instance Version TimeZone+instance Serialize TimeZone where+ getCopy = contain $ do minutes <- safeGet+ summerOnly <- safeGet+ nam <- safeGet+ return (TimeZone minutes summerOnly nam)+ putCopy (TimeZone minutes summerOnly nam) =+ contain $ do safePut minutes+ safePut summerOnly+ safePut nam++instance Version TimeOfDay+instance Serialize TimeOfDay where+ getCopy = contain $ do h <- safeGet+ m <- safeGet+ s <- safeGet+ return (TimeOfDay h m (fromRational s))+ putCopy (TimeOfDay h m s) =+ contain $ do safePut h+ safePut m+ safePut (toRational s)++instance Version ZonedTime+instance Serialize ZonedTime where+ getCopy = contain $ liftM2 ZonedTime safeGet safeGet+ putCopy (ZonedTime lt tz) = contain $ safePut lt >> safePut tz++instance Version LocalTime+instance Serialize LocalTime where+ getCopy = contain $ liftM2 LocalTime safeGet safeGet+ putCopy (LocalTime day tod) = contain $ safePut day >> safePut tod++instance Version DiffTime+instance Serialize DiffTime where+ getCopy = contain $ liftM fromRational safeGet ; putCopy = contain . safePut . toRational++instance Version NominalDiffTime+instance Serialize NominalDiffTime where+ getCopy = contain $ liftM fromRational get ; putCopy = contain . put . toRational++instance Version AbsoluteTime+instance Serialize AbsoluteTime where+ getCopy = contain $ liftM toAbsoluteTime safeGet+ where+ toAbsoluteTime :: DiffTime -> AbsoluteTime+ toAbsoluteTime dt = addAbsoluteTime dt taiEpoch+ putCopy = contain . safePut . fromAbsoluteTime+ where+ fromAbsoluteTime :: AbsoluteTime -> DiffTime+ fromAbsoluteTime at = diffAbsoluteTime at taiEpoch -------------------------------------------------------------- -- Object serialization
src/Happstack/Data/Xml/Base.hs view
@@ -3,7 +3,7 @@ ScopedTypeVariables, GADTs, PolymorphicComponents, FlexibleContexts, MultiParamTypeClasses, DeriveDataTypeable,- PatternSignatures, PatternGuards #-}+ ScopedTypeVariables, PatternGuards #-} module Happstack.Data.Xml.Base where @@ -22,7 +22,6 @@ import Happstack.Data.Normalize import Happstack.Util.TH import Language.Haskell.TH-import qualified Data.Generics as G {-| Element recursively represents XML data. Elem n elems -> XML element with name n and described by elems. Note that elems contains sub-elements as well as the attributes or literal data of the element.
src/Happstack/Data/Xml/Instances.hs view
@@ -9,12 +9,10 @@ module Happstack.Data.Xml.Instances where -import Data.Char import Data.List import Happstack.Data.Xml.Base import Data.Generics.SYB.WithClass.Basics import Data.Generics.SYB.WithClass.Instances ()-import Data.Maybe import Data.ByteString.Char8 (ByteString) import qualified Data.ByteString.Char8 as BS