{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, UndecidableInstances, TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.SafeCopy.Instances where
import Data.SafeCopy.SafeCopy
#if !MIN_VERSION_base(4,8,0)
import Control.Applicative
#endif
import Control.Monad
import qualified Data.Array as Array
import qualified Data.Array.Unboxed as UArray
import qualified Data.Array.IArray as IArray
import qualified Data.ByteString.Lazy.Char8 as L
import qualified Data.ByteString.Char8 as B
import qualified Data.Foldable as Foldable
import Data.Fixed (HasResolution, Fixed)
import Data.Int
import qualified Data.IntMap as IntMap
import qualified Data.IntSet as IntSet
import Data.Ix
import qualified Data.List.NonEmpty as NonEmpty
import qualified Data.Map as Map
import Data.Ratio (Ratio, (%), numerator, denominator)
import qualified Data.Sequence as Sequence
import Data.Serialize
import qualified Data.Set as Set
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TL
import Data.Time.Calendar (Day(..))
import Data.Time.Clock (DiffTime, NominalDiffTime, UniversalTime(..), UTCTime(..))
import Data.Time.Clock.TAI (AbsoluteTime, taiEpoch, addAbsoluteTime, diffAbsoluteTime)
import Data.Time.LocalTime (LocalTime(..), TimeOfDay(..), TimeZone(..), ZonedTime(..))
import qualified Data.Tree as Tree
import Data.Typeable hiding (Proxy)
import Data.Word
import Numeric.Natural (Natural)
import System.Time (ClockTime(..), TimeDiff(..), CalendarTime(..), Month(..))
import qualified System.Time as OT
import qualified Data.Vector as V
import qualified Data.Vector.Generic as VG
import qualified Data.Vector.Primitive as VP
import qualified Data.Vector.Storable as VS
import qualified Data.Vector.Unboxed as VU
instance SafeCopy a => SafeCopy (Prim a) where
kind :: Kind (Prim a)
kind = Kind (Prim a)
forall a. Kind a
primitive
getCopy :: Contained (Get (Prim a))
getCopy = Get (Prim a) -> Contained (Get (Prim a))
forall a. a -> Contained a
contain (Get (Prim a) -> Contained (Get (Prim a)))
-> Get (Prim a) -> Contained (Get (Prim a))
forall a b. (a -> b) -> a -> b
$
do a
e <- Contained (Get a) -> Get a
forall a. Contained a -> a
unsafeUnPack Contained (Get a)
forall a. SafeCopy a => Contained (Get a)
getCopy
Prim a -> Get (Prim a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Prim a -> Get (Prim a)) -> Prim a -> Get (Prim a)
forall a b. (a -> b) -> a -> b
$ a -> Prim a
forall a. a -> Prim a
Prim a
e
putCopy :: Prim a -> Contained Put
putCopy (Prim a
e)
= Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ Contained Put -> Put
forall a. Contained a -> a
unsafeUnPack (a -> Contained Put
forall a. SafeCopy a => a -> Contained Put
putCopy a
e)
instance SafeCopy a => SafeCopy [a] where
getCopy :: Contained (Get [a])
getCopy = Get [a] -> Contained (Get [a])
forall a. a -> Contained a
contain (Get [a] -> Contained (Get [a])) -> Get [a] -> Contained (Get [a])
forall a b. (a -> b) -> a -> b
$ do
Int
n <- Get Int
forall t. Serialize t => Get t
get
Get a
g <- Get (Get a)
forall a. SafeCopy a => Get (Get a)
getSafeGet
Get a -> [a] -> Int -> Get [a]
forall a. Get a -> [a] -> Int -> Get [a]
go Get a
g [] Int
n
where
go :: Get a -> [a] -> Int -> Get [a]
go :: Get a -> [a] -> Int -> Get [a]
go Get a
_ [a]
as Int
0 = [a] -> Get [a]
forall (m :: * -> *) a. Monad m => a -> m a
return ([a] -> [a]
forall a. [a] -> [a]
reverse [a]
as)
go Get a
g [a]
as Int
i = do a
x <- Get a
g
a
x a -> Get [a] -> Get [a]
`seq` Get a -> [a] -> Int -> Get [a]
forall a. Get a -> [a] -> Int -> Get [a]
go Get a
g (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
as) (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
putCopy :: [a] -> Contained Put
putCopy [a]
lst = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall t. Serialize t => Putter t
put ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
lst)
PutM (a -> Put)
forall a. SafeCopy a => PutM (a -> Put)
getSafePut PutM (a -> Put) -> ((a -> Put) -> Put) -> Put
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [a] -> (a -> Put) -> Put
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [a]
lst
errorTypeName :: Proxy [a] -> String
errorTypeName = Proxy [a] -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance SafeCopy a => SafeCopy (NonEmpty.NonEmpty a) where
getCopy :: Contained (Get (NonEmpty a))
getCopy = Get (NonEmpty a) -> Contained (Get (NonEmpty a))
forall a. a -> Contained a
contain (Get (NonEmpty a) -> Contained (Get (NonEmpty a)))
-> Get (NonEmpty a) -> Contained (Get (NonEmpty a))
forall a b. (a -> b) -> a -> b
$ ([a] -> NonEmpty a) -> Get [a] -> Get (NonEmpty a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> NonEmpty a
forall a. [a] -> NonEmpty a
NonEmpty.fromList Get [a]
forall a. SafeCopy a => Get a
safeGet
putCopy :: NonEmpty a -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (NonEmpty a -> Put) -> NonEmpty a -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Put
forall a. SafeCopy a => a -> Put
safePut ([a] -> Put) -> (NonEmpty a -> [a]) -> NonEmpty a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonEmpty a -> [a]
forall a. NonEmpty a -> [a]
NonEmpty.toList
errorTypeName :: Proxy (NonEmpty a) -> String
errorTypeName = Proxy (NonEmpty a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance SafeCopy a => SafeCopy (Maybe a) where
getCopy :: Contained (Get (Maybe a))
getCopy = Get (Maybe a) -> Contained (Get (Maybe a))
forall a. a -> Contained a
contain (Get (Maybe a) -> Contained (Get (Maybe a)))
-> Get (Maybe a) -> Contained (Get (Maybe a))
forall a b. (a -> b) -> a -> b
$ do Bool
n <- Get Bool
forall t. Serialize t => Get t
get
if Bool
n then (a -> Maybe a) -> Get a -> Get (Maybe a)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> Maybe a
forall a. a -> Maybe a
Just Get a
forall a. SafeCopy a => Get a
safeGet
else Maybe a -> Get (Maybe a)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe a
forall a. Maybe a
Nothing
putCopy :: Maybe a -> Contained Put
putCopy (Just a
a) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ Putter Bool
forall t. Serialize t => Putter t
put Bool
True Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a
putCopy Maybe a
Nothing = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ Putter Bool
forall t. Serialize t => Putter t
put Bool
False
errorTypeName :: Proxy (Maybe a) -> String
errorTypeName = Proxy (Maybe a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance (SafeCopy a, Ord a) => SafeCopy (Set.Set a) where
getCopy :: Contained (Get (Set a))
getCopy = Get (Set a) -> Contained (Get (Set a))
forall a. a -> Contained a
contain (Get (Set a) -> Contained (Get (Set a)))
-> Get (Set a) -> Contained (Get (Set a))
forall a b. (a -> b) -> a -> b
$ ([a] -> Set a) -> Get [a] -> Get (Set a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> Set a
forall a. [a] -> Set a
Set.fromDistinctAscList Get [a]
forall a. SafeCopy a => Get a
safeGet
putCopy :: Set a -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Set a -> Put) -> Set a -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Put
forall a. SafeCopy a => a -> Put
safePut ([a] -> Put) -> (Set a -> [a]) -> Set a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Set a -> [a]
forall a. Set a -> [a]
Set.toAscList
errorTypeName :: Proxy (Set a) -> String
errorTypeName = Proxy (Set a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance (SafeCopy a, SafeCopy b, Ord a) => SafeCopy (Map.Map a b) where
getCopy :: Contained (Get (Map a b))
getCopy = Get (Map a b) -> Contained (Get (Map a b))
forall a. a -> Contained a
contain (Get (Map a b) -> Contained (Get (Map a b)))
-> Get (Map a b) -> Contained (Get (Map a b))
forall a b. (a -> b) -> a -> b
$ ([(a, b)] -> Map a b) -> Get [(a, b)] -> Get (Map a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(a, b)] -> Map a b
forall k a. [(k, a)] -> Map k a
Map.fromDistinctAscList Get [(a, b)]
forall a. SafeCopy a => Get a
safeGet
putCopy :: Map a b -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Map a b -> Put) -> Map a b -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(a, b)] -> Put
forall a. SafeCopy a => a -> Put
safePut ([(a, b)] -> Put) -> (Map a b -> [(a, b)]) -> Map a b -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map a b -> [(a, b)]
forall k a. Map k a -> [(k, a)]
Map.toAscList
errorTypeName :: Proxy (Map a b) -> String
errorTypeName = Proxy (Map a b) -> String
forall (c :: * -> * -> *) a b.
Typeable c =>
Proxy (c a b) -> String
typeName2
instance (SafeCopy a) => SafeCopy (IntMap.IntMap a) where
getCopy :: Contained (Get (IntMap a))
getCopy = Get (IntMap a) -> Contained (Get (IntMap a))
forall a. a -> Contained a
contain (Get (IntMap a) -> Contained (Get (IntMap a)))
-> Get (IntMap a) -> Contained (Get (IntMap a))
forall a b. (a -> b) -> a -> b
$ ([(Int, a)] -> IntMap a) -> Get [(Int, a)] -> Get (IntMap a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(Int, a)] -> IntMap a
forall a. [(Int, a)] -> IntMap a
IntMap.fromDistinctAscList Get [(Int, a)]
forall a. SafeCopy a => Get a
safeGet
putCopy :: IntMap a -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (IntMap a -> Put) -> IntMap a -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Int, a)] -> Put
forall a. SafeCopy a => a -> Put
safePut ([(Int, a)] -> Put) -> (IntMap a -> [(Int, a)]) -> IntMap a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IntMap a -> [(Int, a)]
forall a. IntMap a -> [(Int, a)]
IntMap.toAscList
errorTypeName :: Proxy (IntMap a) -> String
errorTypeName = Proxy (IntMap a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance SafeCopy IntSet.IntSet where
getCopy :: Contained (Get IntSet)
getCopy = Get IntSet -> Contained (Get IntSet)
forall a. a -> Contained a
contain (Get IntSet -> Contained (Get IntSet))
-> Get IntSet -> Contained (Get IntSet)
forall a b. (a -> b) -> a -> b
$ ([Int] -> IntSet) -> Get [Int] -> Get IntSet
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Int] -> IntSet
IntSet.fromDistinctAscList Get [Int]
forall a. SafeCopy a => Get a
safeGet
putCopy :: IntSet -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (IntSet -> Put) -> IntSet -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> Put
forall a. SafeCopy a => a -> Put
safePut ([Int] -> Put) -> (IntSet -> [Int]) -> IntSet -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IntSet -> [Int]
IntSet.toAscList
errorTypeName :: Proxy IntSet -> String
errorTypeName = Proxy IntSet -> String
forall a. Typeable a => Proxy a -> String
typeName
instance (SafeCopy a) => SafeCopy (Sequence.Seq a) where
getCopy :: Contained (Get (Seq a))
getCopy = Get (Seq a) -> Contained (Get (Seq a))
forall a. a -> Contained a
contain (Get (Seq a) -> Contained (Get (Seq a)))
-> Get (Seq a) -> Contained (Get (Seq a))
forall a b. (a -> b) -> a -> b
$ ([a] -> Seq a) -> Get [a] -> Get (Seq a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [a] -> Seq a
forall a. [a] -> Seq a
Sequence.fromList Get [a]
forall a. SafeCopy a => Get a
safeGet
putCopy :: Seq a -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Seq a -> Put) -> Seq a -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> Put
forall a. SafeCopy a => a -> Put
safePut ([a] -> Put) -> (Seq a -> [a]) -> Seq a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
Foldable.toList
errorTypeName :: Proxy (Seq a) -> String
errorTypeName = Proxy (Seq a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance (SafeCopy a) => SafeCopy (Tree.Tree a) where
getCopy :: Contained (Get (Tree a))
getCopy = Get (Tree a) -> Contained (Get (Tree a))
forall a. a -> Contained a
contain (Get (Tree a) -> Contained (Get (Tree a)))
-> Get (Tree a) -> Contained (Get (Tree a))
forall a b. (a -> b) -> a -> b
$ (a -> Forest a -> Tree a)
-> Get a -> Get (Forest a) -> Get (Tree a)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 a -> Forest a -> Tree a
forall a. a -> Forest a -> Tree a
Tree.Node Get a
forall a. SafeCopy a => Get a
safeGet Get (Forest a)
forall a. SafeCopy a => Get a
safeGet
putCopy :: Tree a -> Contained Put
putCopy (Tree.Node a
root Forest a
sub) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
root Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Forest a -> Put
forall a. SafeCopy a => a -> Put
safePut Forest a
sub
errorTypeName :: Proxy (Tree a) -> String
errorTypeName = Proxy (Tree a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
iarray_getCopy :: (Ix i, SafeCopy e, SafeCopy i, IArray.IArray a e) => Contained (Get (a i e))
iarray_getCopy :: Contained (Get (a i e))
iarray_getCopy = Get (a i e) -> Contained (Get (a i e))
forall a. a -> Contained a
contain (Get (a i e) -> Contained (Get (a i e)))
-> Get (a i e) -> Contained (Get (a i e))
forall a b. (a -> b) -> a -> b
$ do Get i
getIx <- Get (Get i)
forall a. SafeCopy a => Get (Get a)
getSafeGet
(i -> i -> [e] -> a i e)
-> Get i -> Get i -> Get [e] -> Get (a i e)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 i -> i -> [e] -> a i e
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
i -> i -> [e] -> a i e
mkArray Get i
getIx Get i
getIx Get [e]
forall a. SafeCopy a => Get a
safeGet
where
mkArray :: i -> i -> [e] -> a i e
mkArray i
l i
h [e]
xs = (i, i) -> [e] -> a i e
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
(i, i) -> [e] -> a i e
IArray.listArray (i
l, i
h) [e]
xs
{-# INLINE iarray_getCopy #-}
iarray_putCopy :: (Ix i, SafeCopy e, SafeCopy i, IArray.IArray a e) => a i e -> Contained Put
iarray_putCopy :: a i e -> Contained Put
iarray_putCopy a i e
arr = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do i -> Put
putIx <- PutM (i -> Put)
forall a. SafeCopy a => PutM (a -> Put)
getSafePut
let (i
l,i
h) = a i e -> (i, i)
forall (a :: * -> * -> *) e i.
(IArray a e, Ix i) =>
a i e -> (i, i)
IArray.bounds a i e
arr
i -> Put
putIx i
l Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> i -> Put
putIx i
h
[e] -> Put
forall a. SafeCopy a => a -> Put
safePut (a i e -> [e]
forall (a :: * -> * -> *) e i. (IArray a e, Ix i) => a i e -> [e]
IArray.elems a i e
arr)
{-# INLINE iarray_putCopy #-}
instance (Ix i, SafeCopy e, SafeCopy i) => SafeCopy (Array.Array i e) where
getCopy :: Contained (Get (Array i e))
getCopy = Contained (Get (Array i e))
forall i e (a :: * -> * -> *).
(Ix i, SafeCopy e, SafeCopy i, IArray a e) =>
Contained (Get (a i e))
iarray_getCopy
putCopy :: Array i e -> Contained Put
putCopy = Array i e -> Contained Put
forall i e (a :: * -> * -> *).
(Ix i, SafeCopy e, SafeCopy i, IArray a e) =>
a i e -> Contained Put
iarray_putCopy
errorTypeName :: Proxy (Array i e) -> String
errorTypeName = Proxy (Array i e) -> String
forall (c :: * -> * -> *) a b.
Typeable c =>
Proxy (c a b) -> String
typeName2
instance (IArray.IArray UArray.UArray e, Ix i, SafeCopy e, SafeCopy i) => SafeCopy (UArray.UArray i e) where
getCopy :: Contained (Get (UArray i e))
getCopy = Contained (Get (UArray i e))
forall i e (a :: * -> * -> *).
(Ix i, SafeCopy e, SafeCopy i, IArray a e) =>
Contained (Get (a i e))
iarray_getCopy
putCopy :: UArray i e -> Contained Put
putCopy = UArray i e -> Contained Put
forall i e (a :: * -> * -> *).
(Ix i, SafeCopy e, SafeCopy i, IArray a e) =>
a i e -> Contained Put
iarray_putCopy
errorTypeName :: Proxy (UArray i e) -> String
errorTypeName = Proxy (UArray i e) -> String
forall (c :: * -> * -> *) a b.
Typeable c =>
Proxy (c a b) -> String
typeName2
instance (SafeCopy a, SafeCopy b) => SafeCopy (a,b) where
getCopy :: Contained (Get (a, b))
getCopy = Get (a, b) -> Contained (Get (a, b))
forall a. a -> Contained a
contain (Get (a, b) -> Contained (Get (a, b)))
-> Get (a, b) -> Contained (Get (a, b))
forall a b. (a -> b) -> a -> b
$ (a -> b -> (a, b)) -> Get a -> Get b -> Get (a, b)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (,) Get a
forall a. SafeCopy a => Get a
safeGet Get b
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b) -> Contained Put
putCopy (a
a,b
b) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b
errorTypeName :: Proxy (a, b) -> String
errorTypeName = Proxy (a, b) -> String
forall (c :: * -> * -> *) a b.
Typeable c =>
Proxy (c a b) -> String
typeName2
instance (SafeCopy a, SafeCopy b, SafeCopy c) => SafeCopy (a,b,c) where
getCopy :: Contained (Get (a, b, c))
getCopy = Get (a, b, c) -> Contained (Get (a, b, c))
forall a. a -> Contained a
contain (Get (a, b, c) -> Contained (Get (a, b, c)))
-> Get (a, b, c) -> Contained (Get (a, b, c))
forall a b. (a -> b) -> a -> b
$ (a -> b -> c -> (a, b, c))
-> Get a -> Get b -> Get c -> Get (a, b, c)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 (,,) Get a
forall a. SafeCopy a => Get a
safeGet Get b
forall a. SafeCopy a => Get a
safeGet Get c
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b, c) -> Contained Put
putCopy (a
a,b
b,c
c) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> c -> Put
forall a. SafeCopy a => a -> Put
safePut c
c
instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d) => SafeCopy (a,b,c,d) where
getCopy :: Contained (Get (a, b, c, d))
getCopy = Get (a, b, c, d) -> Contained (Get (a, b, c, d))
forall a. a -> Contained a
contain (Get (a, b, c, d) -> Contained (Get (a, b, c, d)))
-> Get (a, b, c, d) -> Contained (Get (a, b, c, d))
forall a b. (a -> b) -> a -> b
$ (a -> b -> c -> d -> (a, b, c, d))
-> Get a -> Get b -> Get c -> Get d -> Get (a, b, c, d)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 (,,,) Get a
forall a. SafeCopy a => Get a
safeGet Get b
forall a. SafeCopy a => Get a
safeGet Get c
forall a. SafeCopy a => Get a
safeGet Get d
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b, c, d) -> Contained Put
putCopy (a
a,b
b,c
c,d
d) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> c -> Put
forall a. SafeCopy a => a -> Put
safePut c
c Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> d -> Put
forall a. SafeCopy a => a -> Put
safePut d
d
instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e) =>
SafeCopy (a,b,c,d,e) where
getCopy :: Contained (Get (a, b, c, d, e))
getCopy = Get (a, b, c, d, e) -> Contained (Get (a, b, c, d, e))
forall a. a -> Contained a
contain (Get (a, b, c, d, e) -> Contained (Get (a, b, c, d, e)))
-> Get (a, b, c, d, e) -> Contained (Get (a, b, c, d, e))
forall a b. (a -> b) -> a -> b
$ (a -> b -> c -> d -> e -> (a, b, c, d, e))
-> Get a -> Get b -> Get c -> Get d -> Get e -> Get (a, b, c, d, e)
forall (m :: * -> *) a1 a2 a3 a4 a5 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> a5 -> r)
-> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
liftM5 (,,,,) Get a
forall a. SafeCopy a => Get a
safeGet Get b
forall a. SafeCopy a => Get a
safeGet Get c
forall a. SafeCopy a => Get a
safeGet Get d
forall a. SafeCopy a => Get a
safeGet Get e
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b, c, d, e) -> Contained Put
putCopy (a
a,b
b,c
c,d
d,e
e) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> c -> Put
forall a. SafeCopy a => a -> Put
safePut c
c Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> d -> Put
forall a. SafeCopy a => a -> Put
safePut d
d Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> e -> Put
forall a. SafeCopy a => a -> Put
safePut e
e
instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e, SafeCopy f) =>
SafeCopy (a,b,c,d,e,f) where
getCopy :: Contained (Get (a, b, c, d, e, f))
getCopy = Get (a, b, c, d, e, f) -> Contained (Get (a, b, c, d, e, f))
forall a. a -> Contained a
contain (Get (a, b, c, d, e, f) -> Contained (Get (a, b, c, d, e, f)))
-> Get (a, b, c, d, e, f) -> Contained (Get (a, b, c, d, e, f))
forall a b. (a -> b) -> a -> b
$ (,,,,,) (a -> b -> c -> d -> e -> f -> (a, b, c, d, e, f))
-> Get a -> Get (b -> c -> d -> e -> f -> (a, b, c, d, e, f))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get a
forall a. SafeCopy a => Get a
safeGet Get (b -> c -> d -> e -> f -> (a, b, c, d, e, f))
-> Get b -> Get (c -> d -> e -> f -> (a, b, c, d, e, f))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get b
forall a. SafeCopy a => Get a
safeGet Get (c -> d -> e -> f -> (a, b, c, d, e, f))
-> Get c -> Get (d -> e -> f -> (a, b, c, d, e, f))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get c
forall a. SafeCopy a => Get a
safeGet Get (d -> e -> f -> (a, b, c, d, e, f))
-> Get d -> Get (e -> f -> (a, b, c, d, e, f))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get d
forall a. SafeCopy a => Get a
safeGet Get (e -> f -> (a, b, c, d, e, f))
-> Get e -> Get (f -> (a, b, c, d, e, f))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get e
forall a. SafeCopy a => Get a
safeGet Get (f -> (a, b, c, d, e, f)) -> Get f -> Get (a, b, c, d, e, f)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get f
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b, c, d, e, f) -> Contained Put
putCopy (a
a,b
b,c
c,d
d,e
e,f
f) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> c -> Put
forall a. SafeCopy a => a -> Put
safePut c
c Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> d -> Put
forall a. SafeCopy a => a -> Put
safePut d
d Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
e -> Put
forall a. SafeCopy a => a -> Put
safePut e
e Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> f -> Put
forall a. SafeCopy a => a -> Put
safePut f
f
instance (SafeCopy a, SafeCopy b, SafeCopy c, SafeCopy d, SafeCopy e, SafeCopy f, SafeCopy g) =>
SafeCopy (a,b,c,d,e,f,g) where
getCopy :: Contained (Get (a, b, c, d, e, f, g))
getCopy = Get (a, b, c, d, e, f, g) -> Contained (Get (a, b, c, d, e, f, g))
forall a. a -> Contained a
contain (Get (a, b, c, d, e, f, g)
-> Contained (Get (a, b, c, d, e, f, g)))
-> Get (a, b, c, d, e, f, g)
-> Contained (Get (a, b, c, d, e, f, g))
forall a b. (a -> b) -> a -> b
$ (,,,,,,) (a -> b -> c -> d -> e -> f -> g -> (a, b, c, d, e, f, g))
-> Get a
-> Get (b -> c -> d -> e -> f -> g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get a
forall a. SafeCopy a => Get a
safeGet Get (b -> c -> d -> e -> f -> g -> (a, b, c, d, e, f, g))
-> Get b -> Get (c -> d -> e -> f -> g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get b
forall a. SafeCopy a => Get a
safeGet Get (c -> d -> e -> f -> g -> (a, b, c, d, e, f, g))
-> Get c -> Get (d -> e -> f -> g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get c
forall a. SafeCopy a => Get a
safeGet Get (d -> e -> f -> g -> (a, b, c, d, e, f, g))
-> Get d -> Get (e -> f -> g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get d
forall a. SafeCopy a => Get a
safeGet Get (e -> f -> g -> (a, b, c, d, e, f, g))
-> Get e -> Get (f -> g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>
Get e
forall a. SafeCopy a => Get a
safeGet Get (f -> g -> (a, b, c, d, e, f, g))
-> Get f -> Get (g -> (a, b, c, d, e, f, g))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get f
forall a. SafeCopy a => Get a
safeGet Get (g -> (a, b, c, d, e, f, g))
-> Get g -> Get (a, b, c, d, e, f, g)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Get g
forall a. SafeCopy a => Get a
safeGet
putCopy :: (a, b, c, d, e, f, g) -> Contained Put
putCopy (a
a,b
b,c
c,d
d,e
e,f
f,g
g) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
b Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> c -> Put
forall a. SafeCopy a => a -> Put
safePut c
c Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> d -> Put
forall a. SafeCopy a => a -> Put
safePut d
d Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
e -> Put
forall a. SafeCopy a => a -> Put
safePut e
e Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> f -> Put
forall a. SafeCopy a => a -> Put
safePut f
f Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> g -> Put
forall a. SafeCopy a => a -> Put
safePut g
g
instance SafeCopy Int where
getCopy :: Contained (Get Int)
getCopy = Get Int -> Contained (Get Int)
forall a. a -> Contained a
contain Get Int
forall t. Serialize t => Get t
get; putCopy :: Int -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Putter Int -> Int -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Putter Int
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Int -> String
errorTypeName = Proxy Int -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Integer where
getCopy :: Contained (Get Integer)
getCopy = Get Integer -> Contained (Get Integer)
forall a. a -> Contained a
contain Get Integer
forall t. Serialize t => Get t
get; putCopy :: Integer -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Integer -> Put) -> Integer -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Integer -> String
errorTypeName = Proxy Integer -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Natural where
getCopy :: Contained (Get Natural)
getCopy = Get Natural -> Contained (Get Natural)
forall a. a -> Contained a
contain Get Natural
forall t. Serialize t => Get t
get; putCopy :: Natural -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Natural -> Put) -> Natural -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Natural -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Natural -> String
errorTypeName = Proxy Natural -> String
forall a. Typeable a => Proxy a -> String
typeName
newtype CerealFloat040 = CerealFloat040 { CerealFloat040 -> Float
unCerealFloat040 :: Float} deriving (Int -> CerealFloat040 -> ShowS
[CerealFloat040] -> ShowS
CerealFloat040 -> String
(Int -> CerealFloat040 -> ShowS)
-> (CerealFloat040 -> String)
-> ([CerealFloat040] -> ShowS)
-> Show CerealFloat040
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CerealFloat040] -> ShowS
$cshowList :: [CerealFloat040] -> ShowS
show :: CerealFloat040 -> String
$cshow :: CerealFloat040 -> String
showsPrec :: Int -> CerealFloat040 -> ShowS
$cshowsPrec :: Int -> CerealFloat040 -> ShowS
Show, Typeable)
instance SafeCopy CerealFloat040 where
getCopy :: Contained (Get CerealFloat040)
getCopy = Get CerealFloat040 -> Contained (Get CerealFloat040)
forall a. a -> Contained a
contain (Float -> CerealFloat040
CerealFloat040 (Float -> CerealFloat040) -> Get Float -> Get CerealFloat040
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Integer -> Int -> Float) -> Get Integer -> Get Int -> Get Float
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 Integer -> Int -> Float
forall a. RealFloat a => Integer -> Int -> a
encodeFloat Get Integer
forall t. Serialize t => Get t
get Get Int
forall t. Serialize t => Get t
get)
putCopy :: CerealFloat040 -> Contained Put
putCopy (CerealFloat040 Float
float) = Put -> Contained Put
forall a. a -> Contained a
contain (Putter (Integer, Int)
forall t. Serialize t => Putter t
put (Float -> (Integer, Int)
forall a. RealFloat a => a -> (Integer, Int)
decodeFloat Float
float))
errorTypeName :: Proxy CerealFloat040 -> String
errorTypeName = Proxy CerealFloat040 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance Migrate Float where
type MigrateFrom Float = CerealFloat040
migrate :: MigrateFrom Float -> Float
migrate (CerealFloat040 d) = Float
d
instance SafeCopy Float where
version :: Version Float
version = Int32 -> Version Float
forall a. Int32 -> Version a
Version Int32
1
kind :: Kind Float
kind = Kind Float
forall a. Migrate a => Kind a
extension
getCopy :: Contained (Get Float)
getCopy = Get Float -> Contained (Get Float)
forall a. a -> Contained a
contain Get Float
forall t. Serialize t => Get t
get
putCopy :: Float -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Float -> Put) -> Float -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Put
forall t. Serialize t => Putter t
put
errorTypeName :: Proxy Float -> String
errorTypeName = Proxy Float -> String
forall a. Typeable a => Proxy a -> String
typeName
newtype CerealDouble040 = CerealDouble040 { CerealDouble040 -> Double
unCerealDouble040 :: Double} deriving (Int -> CerealDouble040 -> ShowS
[CerealDouble040] -> ShowS
CerealDouble040 -> String
(Int -> CerealDouble040 -> ShowS)
-> (CerealDouble040 -> String)
-> ([CerealDouble040] -> ShowS)
-> Show CerealDouble040
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CerealDouble040] -> ShowS
$cshowList :: [CerealDouble040] -> ShowS
show :: CerealDouble040 -> String
$cshow :: CerealDouble040 -> String
showsPrec :: Int -> CerealDouble040 -> ShowS
$cshowsPrec :: Int -> CerealDouble040 -> ShowS
Show, Typeable)
instance SafeCopy CerealDouble040 where
getCopy :: Contained (Get CerealDouble040)
getCopy = Get CerealDouble040 -> Contained (Get CerealDouble040)
forall a. a -> Contained a
contain (Double -> CerealDouble040
CerealDouble040 (Double -> CerealDouble040) -> Get Double -> Get CerealDouble040
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Integer -> Int -> Double) -> Get Integer -> Get Int -> Get Double
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 Integer -> Int -> Double
forall a. RealFloat a => Integer -> Int -> a
encodeFloat Get Integer
forall t. Serialize t => Get t
get Get Int
forall t. Serialize t => Get t
get)
putCopy :: CerealDouble040 -> Contained Put
putCopy (CerealDouble040 Double
double) = Put -> Contained Put
forall a. a -> Contained a
contain (Putter (Integer, Int)
forall t. Serialize t => Putter t
put (Double -> (Integer, Int)
forall a. RealFloat a => a -> (Integer, Int)
decodeFloat Double
double))
errorTypeName :: Proxy CerealDouble040 -> String
errorTypeName = Proxy CerealDouble040 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance Migrate Double where
type MigrateFrom Double = CerealDouble040
migrate :: MigrateFrom Double -> Double
migrate (CerealDouble040 d) = Double
d
instance SafeCopy Double where
version :: Version Double
version = Int32 -> Version Double
forall a. Int32 -> Version a
Version Int32
1
kind :: Kind Double
kind = Kind Double
forall a. Migrate a => Kind a
extension
getCopy :: Contained (Get Double)
getCopy = Get Double -> Contained (Get Double)
forall a. a -> Contained a
contain Get Double
forall t. Serialize t => Get t
get
putCopy :: Double -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Double -> Put) -> Double -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Put
forall t. Serialize t => Putter t
put
errorTypeName :: Proxy Double -> String
errorTypeName = Proxy Double -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy L.ByteString where
getCopy :: Contained (Get ByteString)
getCopy = Get ByteString -> Contained (Get ByteString)
forall a. a -> Contained a
contain Get ByteString
forall t. Serialize t => Get t
get; putCopy :: ByteString -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (ByteString -> Put) -> ByteString -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy ByteString -> String
errorTypeName = Proxy ByteString -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy B.ByteString where
getCopy :: Contained (Get ByteString)
getCopy = Get ByteString -> Contained (Get ByteString)
forall a. a -> Contained a
contain Get ByteString
forall t. Serialize t => Get t
get; putCopy :: ByteString -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (ByteString -> Put) -> ByteString -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy ByteString -> String
errorTypeName = Proxy ByteString -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Char where
getCopy :: Contained (Get Char)
getCopy = Get Char -> Contained (Get Char)
forall a. a -> Contained a
contain Get Char
forall t. Serialize t => Get t
get; putCopy :: Char -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Char -> Put) -> Char -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Char -> String
errorTypeName = Proxy Char -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Word where
getCopy :: Contained (Get Word)
getCopy = Get Word -> Contained (Get Word)
forall a. a -> Contained a
contain Get Word
forall t. Serialize t => Get t
get; putCopy :: Word -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Word -> Put) -> Word -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Word -> String
errorTypeName = Proxy Word -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Word8 where
getCopy :: Contained (Get Word8)
getCopy = Get Word8 -> Contained (Get Word8)
forall a. a -> Contained a
contain Get Word8
forall t. Serialize t => Get t
get; putCopy :: Word8 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Word8 -> Put) -> Word8 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Word8 -> String
errorTypeName = Proxy Word8 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Word16 where
getCopy :: Contained (Get Word16)
getCopy = Get Word16 -> Contained (Get Word16)
forall a. a -> Contained a
contain Get Word16
forall t. Serialize t => Get t
get; putCopy :: Word16 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Word16 -> Put) -> Word16 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Word16 -> String
errorTypeName = Proxy Word16 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Word32 where
getCopy :: Contained (Get Word32)
getCopy = Get Word32 -> Contained (Get Word32)
forall a. a -> Contained a
contain Get Word32
forall t. Serialize t => Get t
get; putCopy :: Word32 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Word32 -> Put) -> Word32 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Word32 -> String
errorTypeName = Proxy Word32 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Word64 where
getCopy :: Contained (Get Word64)
getCopy = Get Word64 -> Contained (Get Word64)
forall a. a -> Contained a
contain Get Word64
forall t. Serialize t => Get t
get; putCopy :: Word64 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Word64 -> Put) -> Word64 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word64 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Word64 -> String
errorTypeName = Proxy Word64 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Ordering where
getCopy :: Contained (Get Ordering)
getCopy = Get Ordering -> Contained (Get Ordering)
forall a. a -> Contained a
contain Get Ordering
forall t. Serialize t => Get t
get; putCopy :: Ordering -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Ordering -> Put) -> Ordering -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ordering -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Ordering -> String
errorTypeName = Proxy Ordering -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Int8 where
getCopy :: Contained (Get Int8)
getCopy = Get Int8 -> Contained (Get Int8)
forall a. a -> Contained a
contain Get Int8
forall t. Serialize t => Get t
get; putCopy :: Int8 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Int8 -> Put) -> Int8 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Int8 -> String
errorTypeName = Proxy Int8 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Int16 where
getCopy :: Contained (Get Int16)
getCopy = Get Int16 -> Contained (Get Int16)
forall a. a -> Contained a
contain Get Int16
forall t. Serialize t => Get t
get; putCopy :: Int16 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Int16 -> Put) -> Int16 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int16 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Int16 -> String
errorTypeName = Proxy Int16 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Int32 where
getCopy :: Contained (Get Int32)
getCopy = Get Int32 -> Contained (Get Int32)
forall a. a -> Contained a
contain Get Int32
forall t. Serialize t => Get t
get; putCopy :: Int32 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Int32 -> Put) -> Int32 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Int32 -> String
errorTypeName = Proxy Int32 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Int64 where
getCopy :: Contained (Get Int64)
getCopy = Get Int64 -> Contained (Get Int64)
forall a. a -> Contained a
contain Get Int64
forall t. Serialize t => Get t
get; putCopy :: Int64 -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Int64 -> Put) -> Int64 -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Int64 -> String
errorTypeName = Proxy Int64 -> String
forall a. Typeable a => Proxy a -> String
typeName
instance (Integral a, SafeCopy a) => SafeCopy (Ratio a) where
getCopy :: Contained (Get (Ratio a))
getCopy = Get (Ratio a) -> Contained (Get (Ratio a))
forall a. a -> Contained a
contain (Get (Ratio a) -> Contained (Get (Ratio a)))
-> Get (Ratio a) -> Contained (Get (Ratio a))
forall a b. (a -> b) -> a -> b
$ do a
n <- Get a
forall a. SafeCopy a => Get a
safeGet
a
d <- Get a
forall a. SafeCopy a => Get a
safeGet
Ratio a -> Get (Ratio a)
forall (m :: * -> *) a. Monad m => a -> m a
return (a
n a -> a -> Ratio a
forall a. Integral a => a -> a -> Ratio a
% a
d)
putCopy :: Ratio a -> Contained Put
putCopy Ratio a
r = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do a -> Put
forall a. SafeCopy a => a -> Put
safePut (Ratio a -> a
forall a. Ratio a -> a
numerator Ratio a
r)
a -> Put
forall a. SafeCopy a => a -> Put
safePut (Ratio a -> a
forall a. Ratio a -> a
denominator Ratio a
r)
errorTypeName :: Proxy (Ratio a) -> String
errorTypeName = Proxy (Ratio a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance (HasResolution a, Fractional (Fixed a), Typeable a) => SafeCopy (Fixed a) where
getCopy :: Contained (Get (Fixed a))
getCopy = Get (Fixed a) -> Contained (Get (Fixed a))
forall a. a -> Contained a
contain (Get (Fixed a) -> Contained (Get (Fixed a)))
-> Get (Fixed a) -> Contained (Get (Fixed a))
forall a b. (a -> b) -> a -> b
$ Rational -> Fixed a
forall a. Fractional a => Rational -> a
fromRational (Rational -> Fixed a) -> Get Rational -> Get (Fixed a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Rational
forall a. SafeCopy a => Get a
safeGet
putCopy :: Fixed a -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (Fixed a -> Put) -> Fixed a -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> Put
forall a. SafeCopy a => a -> Put
safePut (Rational -> Put) -> (Fixed a -> Rational) -> Fixed a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fixed a -> Rational
forall a. Real a => a -> Rational
toRational
errorTypeName :: Proxy (Fixed a) -> String
errorTypeName = Proxy (Fixed a) -> String
forall (c :: * -> *) a. Typeable c => Proxy (c a) -> String
typeName1
instance SafeCopy () where
getCopy :: Contained (Get ())
getCopy = Get () -> Contained (Get ())
forall a. a -> Contained a
contain Get ()
forall t. Serialize t => Get t
get; putCopy :: () -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (() -> Put) -> () -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Put
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy () -> String
errorTypeName = Proxy () -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Bool where
getCopy :: Contained (Get Bool)
getCopy = Get Bool -> Contained (Get Bool)
forall a. a -> Contained a
contain Get Bool
forall t. Serialize t => Get t
get; putCopy :: Bool -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Putter Bool -> Bool -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Putter Bool
forall t. Serialize t => Putter t
put; errorTypeName :: Proxy Bool -> String
errorTypeName = Proxy Bool -> String
forall a. Typeable a => Proxy a -> String
typeName
instance (SafeCopy a, SafeCopy b) => SafeCopy (Either a b) where
getCopy :: Contained (Get (Either a b))
getCopy = Get (Either a b) -> Contained (Get (Either a b))
forall a. a -> Contained a
contain (Get (Either a b) -> Contained (Get (Either a b)))
-> Get (Either a b) -> Contained (Get (Either a b))
forall a b. (a -> b) -> a -> b
$ do Bool
n <- Get Bool
forall t. Serialize t => Get t
get
if Bool
n then (b -> Either a b) -> Get b -> Get (Either a b)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM b -> Either a b
forall a b. b -> Either a b
Right Get b
forall a. SafeCopy a => Get a
safeGet
else (a -> Either a b) -> Get a -> Get (Either a b)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM a -> Either a b
forall a b. a -> Either a b
Left Get a
forall a. SafeCopy a => Get a
safeGet
putCopy :: Either a b -> Contained Put
putCopy (Right b
a) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ Putter Bool
forall t. Serialize t => Putter t
put Bool
True Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> b -> Put
forall a. SafeCopy a => a -> Put
safePut b
a
putCopy (Left a
a) = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ Putter Bool
forall t. Serialize t => Putter t
put Bool
False Put -> Put -> Put
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> a -> Put
forall a. SafeCopy a => a -> Put
safePut a
a
errorTypeName :: Proxy (Either a b) -> String
errorTypeName = Proxy (Either a b) -> String
forall (c :: * -> * -> *) a b.
Typeable c =>
Proxy (c a b) -> String
typeName2
instance SafeCopy T.Text where
kind :: Kind Text
kind = Kind Text
forall a. Kind a
base
getCopy :: Contained (Get Text)
getCopy = Get Text -> Contained (Get Text)
forall a. a -> Contained a
contain (Get Text -> Contained (Get Text))
-> Get Text -> Contained (Get Text)
forall a b. (a -> b) -> a -> b
$ ByteString -> Text
T.decodeUtf8 (ByteString -> Text) -> Get ByteString -> Get Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get ByteString
forall a. SafeCopy a => Get a
safeGet
putCopy :: Text -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Text -> Put) -> Text -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Put
forall a. SafeCopy a => a -> Put
safePut (ByteString -> Put) -> (Text -> ByteString) -> Text -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8
errorTypeName :: Proxy Text -> String
errorTypeName = Proxy Text -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy TL.Text where
kind :: Kind Text
kind = Kind Text
forall a. Kind a
base
getCopy :: Contained (Get Text)
getCopy = Get Text -> Contained (Get Text)
forall a. a -> Contained a
contain (Get Text -> Contained (Get Text))
-> Get Text -> Contained (Get Text)
forall a b. (a -> b) -> a -> b
$ ByteString -> Text
TL.decodeUtf8 (ByteString -> Text) -> Get ByteString -> Get Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get ByteString
forall a. SafeCopy a => Get a
safeGet
putCopy :: Text -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Text -> Put) -> Text -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Put
forall a. SafeCopy a => a -> Put
safePut (ByteString -> Put) -> (Text -> ByteString) -> Text -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
TL.encodeUtf8
errorTypeName :: Proxy Text -> String
errorTypeName = Proxy Text -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy Day where
kind :: Kind Day
kind = Kind Day
forall a. Kind a
base
getCopy :: Contained (Get Day)
getCopy = Get Day -> Contained (Get Day)
forall a. a -> Contained a
contain (Get Day -> Contained (Get Day)) -> Get Day -> Contained (Get Day)
forall a b. (a -> b) -> a -> b
$ Integer -> Day
ModifiedJulianDay (Integer -> Day) -> Get Integer -> Get Day
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Integer
forall a. SafeCopy a => Get a
safeGet
putCopy :: Day -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Day -> Put) -> Day -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Put
forall a. SafeCopy a => a -> Put
safePut (Integer -> Put) -> (Day -> Integer) -> Day -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Integer
toModifiedJulianDay
errorTypeName :: Proxy Day -> String
errorTypeName = Proxy Day -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy DiffTime where
kind :: Kind DiffTime
kind = Kind DiffTime
forall a. Kind a
base
getCopy :: Contained (Get DiffTime)
getCopy = Get DiffTime -> Contained (Get DiffTime)
forall a. a -> Contained a
contain (Get DiffTime -> Contained (Get DiffTime))
-> Get DiffTime -> Contained (Get DiffTime)
forall a b. (a -> b) -> a -> b
$ Rational -> DiffTime
forall a. Fractional a => Rational -> a
fromRational (Rational -> DiffTime) -> Get Rational -> Get DiffTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Rational
forall a. SafeCopy a => Get a
safeGet
putCopy :: DiffTime -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (DiffTime -> Put) -> DiffTime -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> Put
forall a. SafeCopy a => a -> Put
safePut (Rational -> Put) -> (DiffTime -> Rational) -> DiffTime -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DiffTime -> Rational
forall a. Real a => a -> Rational
toRational
errorTypeName :: Proxy DiffTime -> String
errorTypeName = Proxy DiffTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy UniversalTime where
kind :: Kind UniversalTime
kind = Kind UniversalTime
forall a. Kind a
base
getCopy :: Contained (Get UniversalTime)
getCopy = Get UniversalTime -> Contained (Get UniversalTime)
forall a. a -> Contained a
contain (Get UniversalTime -> Contained (Get UniversalTime))
-> Get UniversalTime -> Contained (Get UniversalTime)
forall a b. (a -> b) -> a -> b
$ Rational -> UniversalTime
ModJulianDate (Rational -> UniversalTime) -> Get Rational -> Get UniversalTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Rational
forall a. SafeCopy a => Get a
safeGet
putCopy :: UniversalTime -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (UniversalTime -> Put) -> UniversalTime -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> Put
forall a. SafeCopy a => a -> Put
safePut (Rational -> Put)
-> (UniversalTime -> Rational) -> UniversalTime -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UniversalTime -> Rational
getModJulianDate
errorTypeName :: Proxy UniversalTime -> String
errorTypeName = Proxy UniversalTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy UTCTime where
kind :: Kind UTCTime
kind = Kind UTCTime
forall a. Kind a
base
getCopy :: Contained (Get UTCTime)
getCopy = Get UTCTime -> Contained (Get UTCTime)
forall a. a -> Contained a
contain (Get UTCTime -> Contained (Get UTCTime))
-> Get UTCTime -> Contained (Get UTCTime)
forall a b. (a -> b) -> a -> b
$ do Day
day <- Get Day
forall a. SafeCopy a => Get a
safeGet
DiffTime
diffTime <- Get DiffTime
forall a. SafeCopy a => Get a
safeGet
UTCTime -> Get UTCTime
forall (m :: * -> *) a. Monad m => a -> m a
return (Day -> DiffTime -> UTCTime
UTCTime Day
day DiffTime
diffTime)
putCopy :: UTCTime -> Contained Put
putCopy UTCTime
u = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Day -> Put
forall a. SafeCopy a => a -> Put
safePut (UTCTime -> Day
utctDay UTCTime
u)
DiffTime -> Put
forall a. SafeCopy a => a -> Put
safePut (UTCTime -> DiffTime
utctDayTime UTCTime
u)
errorTypeName :: Proxy UTCTime -> String
errorTypeName = Proxy UTCTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy NominalDiffTime where
kind :: Kind NominalDiffTime
kind = Kind NominalDiffTime
forall a. Kind a
base
getCopy :: Contained (Get NominalDiffTime)
getCopy = Get NominalDiffTime -> Contained (Get NominalDiffTime)
forall a. a -> Contained a
contain (Get NominalDiffTime -> Contained (Get NominalDiffTime))
-> Get NominalDiffTime -> Contained (Get NominalDiffTime)
forall a b. (a -> b) -> a -> b
$ Rational -> NominalDiffTime
forall a. Fractional a => Rational -> a
fromRational (Rational -> NominalDiffTime)
-> Get Rational -> Get NominalDiffTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Rational
forall a. SafeCopy a => Get a
safeGet
putCopy :: NominalDiffTime -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (NominalDiffTime -> Put) -> NominalDiffTime -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> Put
forall a. SafeCopy a => a -> Put
safePut (Rational -> Put)
-> (NominalDiffTime -> Rational) -> NominalDiffTime -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NominalDiffTime -> Rational
forall a. Real a => a -> Rational
toRational
errorTypeName :: Proxy NominalDiffTime -> String
errorTypeName = Proxy NominalDiffTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy TimeOfDay where
kind :: Kind TimeOfDay
kind = Kind TimeOfDay
forall a. Kind a
base
getCopy :: Contained (Get TimeOfDay)
getCopy = Get TimeOfDay -> Contained (Get TimeOfDay)
forall a. a -> Contained a
contain (Get TimeOfDay -> Contained (Get TimeOfDay))
-> Get TimeOfDay -> Contained (Get TimeOfDay)
forall a b. (a -> b) -> a -> b
$ do Int
hour <- Get Int
forall a. SafeCopy a => Get a
safeGet
Int
mins <- Get Int
forall a. SafeCopy a => Get a
safeGet
Pico
sec <- Get Pico
forall a. SafeCopy a => Get a
safeGet
TimeOfDay -> Get TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
hour Int
mins Pico
sec)
putCopy :: TimeOfDay -> Contained Put
putCopy TimeOfDay
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall a. SafeCopy a => a -> Put
safePut (TimeOfDay -> Int
todHour TimeOfDay
t)
Putter Int
forall a. SafeCopy a => a -> Put
safePut (TimeOfDay -> Int
todMin TimeOfDay
t)
Pico -> Put
forall a. SafeCopy a => a -> Put
safePut (TimeOfDay -> Pico
todSec TimeOfDay
t)
errorTypeName :: Proxy TimeOfDay -> String
errorTypeName = Proxy TimeOfDay -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy TimeZone where
kind :: Kind TimeZone
kind = Kind TimeZone
forall a. Kind a
base
getCopy :: Contained (Get TimeZone)
getCopy = Get TimeZone -> Contained (Get TimeZone)
forall a. a -> Contained a
contain (Get TimeZone -> Contained (Get TimeZone))
-> Get TimeZone -> Contained (Get TimeZone)
forall a b. (a -> b) -> a -> b
$ do Int
mins <- Get Int
forall a. SafeCopy a => Get a
safeGet
Bool
summerOnly <- Get Bool
forall a. SafeCopy a => Get a
safeGet
String
zoneName <- Get String
forall a. SafeCopy a => Get a
safeGet
TimeZone -> Get TimeZone
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> Bool -> String -> TimeZone
TimeZone Int
mins Bool
summerOnly String
zoneName)
putCopy :: TimeZone -> Contained Put
putCopy TimeZone
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall a. SafeCopy a => a -> Put
safePut (TimeZone -> Int
timeZoneMinutes TimeZone
t)
Putter Bool
forall a. SafeCopy a => a -> Put
safePut (TimeZone -> Bool
timeZoneSummerOnly TimeZone
t)
String -> Put
forall a. SafeCopy a => a -> Put
safePut (TimeZone -> String
timeZoneName TimeZone
t)
errorTypeName :: Proxy TimeZone -> String
errorTypeName = Proxy TimeZone -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy LocalTime where
kind :: Kind LocalTime
kind = Kind LocalTime
forall a. Kind a
base
getCopy :: Contained (Get LocalTime)
getCopy = Get LocalTime -> Contained (Get LocalTime)
forall a. a -> Contained a
contain (Get LocalTime -> Contained (Get LocalTime))
-> Get LocalTime -> Contained (Get LocalTime)
forall a b. (a -> b) -> a -> b
$ do Day
day <- Get Day
forall a. SafeCopy a => Get a
safeGet
TimeOfDay
tod <- Get TimeOfDay
forall a. SafeCopy a => Get a
safeGet
LocalTime -> Get LocalTime
forall (m :: * -> *) a. Monad m => a -> m a
return (Day -> TimeOfDay -> LocalTime
LocalTime Day
day TimeOfDay
tod)
putCopy :: LocalTime -> Contained Put
putCopy LocalTime
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Day -> Put
forall a. SafeCopy a => a -> Put
safePut (LocalTime -> Day
localDay LocalTime
t)
TimeOfDay -> Put
forall a. SafeCopy a => a -> Put
safePut (LocalTime -> TimeOfDay
localTimeOfDay LocalTime
t)
errorTypeName :: Proxy LocalTime -> String
errorTypeName = Proxy LocalTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy ZonedTime where
kind :: Kind ZonedTime
kind = Kind ZonedTime
forall a. Kind a
base
getCopy :: Contained (Get ZonedTime)
getCopy = Get ZonedTime -> Contained (Get ZonedTime)
forall a. a -> Contained a
contain (Get ZonedTime -> Contained (Get ZonedTime))
-> Get ZonedTime -> Contained (Get ZonedTime)
forall a b. (a -> b) -> a -> b
$ do LocalTime
localTime <- Get LocalTime
forall a. SafeCopy a => Get a
safeGet
TimeZone
timeZone <- Get TimeZone
forall a. SafeCopy a => Get a
safeGet
ZonedTime -> Get ZonedTime
forall (m :: * -> *) a. Monad m => a -> m a
return (LocalTime -> TimeZone -> ZonedTime
ZonedTime LocalTime
localTime TimeZone
timeZone)
putCopy :: ZonedTime -> Contained Put
putCopy ZonedTime
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do LocalTime -> Put
forall a. SafeCopy a => a -> Put
safePut (ZonedTime -> LocalTime
zonedTimeToLocalTime ZonedTime
t)
TimeZone -> Put
forall a. SafeCopy a => a -> Put
safePut (ZonedTime -> TimeZone
zonedTimeZone ZonedTime
t)
errorTypeName :: Proxy ZonedTime -> String
errorTypeName = Proxy ZonedTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy AbsoluteTime where
getCopy :: Contained (Get AbsoluteTime)
getCopy = Get AbsoluteTime -> Contained (Get AbsoluteTime)
forall a. a -> Contained a
contain (Get AbsoluteTime -> Contained (Get AbsoluteTime))
-> Get AbsoluteTime -> Contained (Get AbsoluteTime)
forall a b. (a -> b) -> a -> b
$ (DiffTime -> AbsoluteTime) -> Get DiffTime -> Get AbsoluteTime
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM DiffTime -> AbsoluteTime
toAbsoluteTime Get DiffTime
forall a. SafeCopy a => Get a
safeGet
where
toAbsoluteTime :: DiffTime -> AbsoluteTime
toAbsoluteTime :: DiffTime -> AbsoluteTime
toAbsoluteTime DiffTime
dt = DiffTime -> AbsoluteTime -> AbsoluteTime
addAbsoluteTime DiffTime
dt AbsoluteTime
taiEpoch
putCopy :: AbsoluteTime -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put)
-> (AbsoluteTime -> Put) -> AbsoluteTime -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DiffTime -> Put
forall a. SafeCopy a => a -> Put
safePut (DiffTime -> Put)
-> (AbsoluteTime -> DiffTime) -> AbsoluteTime -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AbsoluteTime -> DiffTime
fromAbsoluteTime
where
fromAbsoluteTime :: AbsoluteTime -> DiffTime
fromAbsoluteTime :: AbsoluteTime -> DiffTime
fromAbsoluteTime AbsoluteTime
at = AbsoluteTime -> AbsoluteTime -> DiffTime
diffAbsoluteTime AbsoluteTime
at AbsoluteTime
taiEpoch
errorTypeName :: Proxy AbsoluteTime -> String
errorTypeName = Proxy AbsoluteTime -> String
forall a. Typeable a => Proxy a -> String
typeName
instance SafeCopy ClockTime where
kind :: Kind ClockTime
kind = Kind ClockTime
forall a. Kind a
base
getCopy :: Contained (Get ClockTime)
getCopy = Get ClockTime -> Contained (Get ClockTime)
forall a. a -> Contained a
contain (Get ClockTime -> Contained (Get ClockTime))
-> Get ClockTime -> Contained (Get ClockTime)
forall a b. (a -> b) -> a -> b
$ do Integer
secs <- Get Integer
forall a. SafeCopy a => Get a
safeGet
Integer
pico <- Get Integer
forall a. SafeCopy a => Get a
safeGet
ClockTime -> Get ClockTime
forall (m :: * -> *) a. Monad m => a -> m a
return (Integer -> Integer -> ClockTime
TOD Integer
secs Integer
pico)
putCopy :: ClockTime -> Contained Put
putCopy (TOD Integer
secs Integer
pico) =
Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Integer -> Put
forall a. SafeCopy a => a -> Put
safePut Integer
secs
Integer -> Put
forall a. SafeCopy a => a -> Put
safePut Integer
pico
instance SafeCopy TimeDiff where
kind :: Kind TimeDiff
kind = Kind TimeDiff
forall a. Kind a
base
getCopy :: Contained (Get TimeDiff)
getCopy = Get TimeDiff -> Contained (Get TimeDiff)
forall a. a -> Contained a
contain (Get TimeDiff -> Contained (Get TimeDiff))
-> Get TimeDiff -> Contained (Get TimeDiff)
forall a b. (a -> b) -> a -> b
$ do Int
year <- Get Int
forall t. Serialize t => Get t
get
Int
month <- Get Int
forall t. Serialize t => Get t
get
Int
day <- Get Int
forall t. Serialize t => Get t
get
Int
hour <- Get Int
forall t. Serialize t => Get t
get
Int
mins <- Get Int
forall t. Serialize t => Get t
get
Int
sec <- Get Int
forall t. Serialize t => Get t
get
Integer
pico <- Get Integer
forall t. Serialize t => Get t
get
TimeDiff -> Get TimeDiff
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> Int -> Int -> Int -> Int -> Int -> Integer -> TimeDiff
TimeDiff Int
year Int
month Int
day Int
hour Int
mins Int
sec Integer
pico)
putCopy :: TimeDiff -> Contained Put
putCopy TimeDiff
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdYear TimeDiff
t)
Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdMonth TimeDiff
t)
Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdDay TimeDiff
t)
Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdHour TimeDiff
t)
Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdMin TimeDiff
t)
Putter Int
forall t. Serialize t => Putter t
put (TimeDiff -> Int
tdSec TimeDiff
t)
Integer -> Put
forall t. Serialize t => Putter t
put (TimeDiff -> Integer
tdPicosec TimeDiff
t)
instance SafeCopy OT.Day where
kind :: Kind Day
kind = Kind Day
forall a. Kind a
base ; getCopy :: Contained (Get Day)
getCopy = Get Day -> Contained (Get Day)
forall a. a -> Contained a
contain (Get Day -> Contained (Get Day)) -> Get Day -> Contained (Get Day)
forall a b. (a -> b) -> a -> b
$ Int -> Day
forall a. Enum a => Int -> a
toEnum (Int -> Day) -> Get Int -> Get Day
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Int
forall t. Serialize t => Get t
get ; putCopy :: Day -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Day -> Put) -> Day -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Putter Int
forall t. Serialize t => Putter t
put Putter Int -> (Day -> Int) -> Day -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Int
forall a. Enum a => a -> Int
fromEnum
instance SafeCopy Month where
kind :: Kind Month
kind = Kind Month
forall a. Kind a
base ; getCopy :: Contained (Get Month)
getCopy = Get Month -> Contained (Get Month)
forall a. a -> Contained a
contain (Get Month -> Contained (Get Month))
-> Get Month -> Contained (Get Month)
forall a b. (a -> b) -> a -> b
$ Int -> Month
forall a. Enum a => Int -> a
toEnum (Int -> Month) -> Get Int -> Get Month
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Int
forall t. Serialize t => Get t
get ; putCopy :: Month -> Contained Put
putCopy = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> (Month -> Put) -> Month -> Contained Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Putter Int
forall t. Serialize t => Putter t
put Putter Int -> (Month -> Int) -> Month -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Month -> Int
forall a. Enum a => a -> Int
fromEnum
instance SafeCopy CalendarTime where
kind :: Kind CalendarTime
kind = Kind CalendarTime
forall a. Kind a
base
getCopy :: Contained (Get CalendarTime)
getCopy = Get CalendarTime -> Contained (Get CalendarTime)
forall a. a -> Contained a
contain (Get CalendarTime -> Contained (Get CalendarTime))
-> Get CalendarTime -> Contained (Get CalendarTime)
forall a b. (a -> b) -> a -> b
$ do Int
year <- Get Int
forall t. Serialize t => Get t
get
Month
month <- Get Month
forall a. SafeCopy a => Get a
safeGet
Int
day <- Get Int
forall t. Serialize t => Get t
get
Int
hour <- Get Int
forall t. Serialize t => Get t
get
Int
mins <- Get Int
forall t. Serialize t => Get t
get
Int
sec <- Get Int
forall t. Serialize t => Get t
get
Integer
pico <- Get Integer
forall t. Serialize t => Get t
get
Day
wday <- Get Day
forall a. SafeCopy a => Get a
safeGet
Int
yday <- Get Int
forall t. Serialize t => Get t
get
String
tzname <- Get String
forall a. SafeCopy a => Get a
safeGet
Int
tz <- Get Int
forall t. Serialize t => Get t
get
Bool
dst <- Get Bool
forall t. Serialize t => Get t
get
CalendarTime -> Get CalendarTime
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
-> Month
-> Int
-> Int
-> Int
-> Int
-> Integer
-> Day
-> Int
-> String
-> Int
-> Bool
-> CalendarTime
CalendarTime Int
year Month
month Int
day Int
hour Int
mins Int
sec Integer
pico Day
wday Int
yday String
tzname Int
tz Bool
dst)
putCopy :: CalendarTime -> Contained Put
putCopy CalendarTime
t = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctYear CalendarTime
t)
Month -> Put
forall a. SafeCopy a => a -> Put
safePut (CalendarTime -> Month
ctMonth CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctDay CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctHour CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctMin CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctSec CalendarTime
t)
Integer -> Put
forall t. Serialize t => Putter t
put (CalendarTime -> Integer
ctPicosec CalendarTime
t)
Day -> Put
forall a. SafeCopy a => a -> Put
safePut (CalendarTime -> Day
ctWDay CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctYDay CalendarTime
t)
String -> Put
forall a. SafeCopy a => a -> Put
safePut (CalendarTime -> String
ctTZName CalendarTime
t)
Putter Int
forall t. Serialize t => Putter t
put (CalendarTime -> Int
ctTZ CalendarTime
t)
Putter Bool
forall t. Serialize t => Putter t
put (CalendarTime -> Bool
ctIsDST CalendarTime
t)
typeName :: Typeable a => Proxy a -> String
typeName :: Proxy a -> String
typeName Proxy a
proxy = TypeRep -> String
forall a. Show a => a -> String
show (a -> TypeRep
forall a. Typeable a => a -> TypeRep
typeOf (a
forall a. HasCallStack => a
undefined a -> Proxy a -> a
forall a. a -> Proxy a -> a
`asProxyType` Proxy a
proxy))
#if MIN_VERSION_base(4,10,0)
typeName1 :: (Typeable c) => Proxy (c a) -> String
typeName2 :: (Typeable c) => Proxy (c a b) -> String
#else
typeName1 :: (Typeable1 c) => Proxy (c a) -> String
typeName2 :: (Typeable2 c) => Proxy (c a b) -> String
#endif
typeName1 :: Proxy (c a) -> String
typeName1 Proxy (c a)
proxy = TypeRep -> String
forall a. Show a => a -> String
show (c a -> TypeRep
forall (t :: * -> *) a. Typeable t => t a -> TypeRep
typeOf1 (c a
forall a. HasCallStack => a
undefined c a -> Proxy (c a) -> c a
forall a. a -> Proxy a -> a
`asProxyType` Proxy (c a)
proxy))
typeName2 :: Proxy (c a b) -> String
typeName2 Proxy (c a b)
proxy = TypeRep -> String
forall a. Show a => a -> String
show (c a b -> TypeRep
forall (t :: * -> * -> *) a b. Typeable t => t a b -> TypeRep
typeOf2 (c a b
forall a. HasCallStack => a
undefined c a b -> Proxy (c a b) -> c a b
forall a. a -> Proxy a -> a
`asProxyType` Proxy (c a b)
proxy))
getGenericVector :: (SafeCopy a, VG.Vector v a) => Contained (Get (v a))
getGenericVector :: Contained (Get (v a))
getGenericVector = Get (v a) -> Contained (Get (v a))
forall a. a -> Contained a
contain (Get (v a) -> Contained (Get (v a)))
-> Get (v a) -> Contained (Get (v a))
forall a b. (a -> b) -> a -> b
$ do Int
n <- Get Int
forall t. Serialize t => Get t
get
Get (Get a)
forall a. SafeCopy a => Get (Get a)
getSafeGet Get (Get a) -> (Get a -> Get (v a)) -> Get (v a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> Get a -> Get (v a)
forall (m :: * -> *) (v :: * -> *) a.
(Monad m, Vector v a) =>
Int -> m a -> m (v a)
VG.replicateM Int
n
putGenericVector :: (SafeCopy a, VG.Vector v a) => v a -> Contained Put
putGenericVector :: v a -> Contained Put
putGenericVector v a
v = Put -> Contained Put
forall a. a -> Contained a
contain (Put -> Contained Put) -> Put -> Contained Put
forall a b. (a -> b) -> a -> b
$ do Putter Int
forall t. Serialize t => Putter t
put (v a -> Int
forall (v :: * -> *) a. Vector v a => v a -> Int
VG.length v a
v)
PutM (a -> Put)
forall a. SafeCopy a => PutM (a -> Put)
getSafePut PutM (a -> Put) -> ((a -> Put) -> Put) -> Put
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= v a -> (a -> Put) -> Put
forall (m :: * -> *) (v :: * -> *) a b.
(Monad m, Vector v a) =>
v a -> (a -> m b) -> m ()
VG.forM_ v a
v
instance SafeCopy a => SafeCopy (V.Vector a) where
getCopy :: Contained (Get (Vector a))
getCopy = Contained (Get (Vector a))
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
Contained (Get (v a))
getGenericVector
putCopy :: Vector a -> Contained Put
putCopy = Vector a -> Contained Put
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
v a -> Contained Put
putGenericVector
instance (SafeCopy a, VP.Prim a) => SafeCopy (VP.Vector a) where
getCopy :: Contained (Get (Vector a))
getCopy = Contained (Get (Vector a))
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
Contained (Get (v a))
getGenericVector
putCopy :: Vector a -> Contained Put
putCopy = Vector a -> Contained Put
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
v a -> Contained Put
putGenericVector
instance (SafeCopy a, VS.Storable a) => SafeCopy (VS.Vector a) where
getCopy :: Contained (Get (Vector a))
getCopy = Contained (Get (Vector a))
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
Contained (Get (v a))
getGenericVector
putCopy :: Vector a -> Contained Put
putCopy = Vector a -> Contained Put
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
v a -> Contained Put
putGenericVector
instance (SafeCopy a, VU.Unbox a) => SafeCopy (VU.Vector a) where
getCopy :: Contained (Get (Vector a))
getCopy = Contained (Get (Vector a))
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
Contained (Get (v a))
getGenericVector
putCopy :: Vector a -> Contained Put
putCopy = Vector a -> Contained Put
forall a (v :: * -> *).
(SafeCopy a, Vector v a) =>
v a -> Contained Put
putGenericVector