packages feed

tables 0.2 → 0.3

raw patch · 3 files changed

+36/−3 lines, 3 filesdep +binarydep +cerealdep +safecopy

Dependencies added: binary, cereal, safecopy

Files

CHANGELOG.markdown view
@@ -1,3 +1,8 @@+0.3+---+* Instances for `SafeCopy`, `Binary` and `Cereal`+* Added `insert'`+ 0.2 --- * Generalized Autoincrement
src/Data/Table.hs view
@@ -52,6 +52,7 @@   , Withal(..)   , Group(..)   , insert+  , insert'   , delete   , rows   , rows'@@ -75,6 +76,8 @@ import Control.Lens import Control.Monad import Control.Monad.Fix+import Data.Binary (Binary)+import qualified Data.Binary as B import Data.Data import Data.Foldable as F import Data.Function (on)@@ -92,6 +95,9 @@ import qualified Data.Map as M import Data.Maybe import Data.Monoid+import Data.SafeCopy (SafeCopy(..), safeGet, safePut, contain)+import Data.Serialize (Serialize)+import qualified Data.Serialize as C import Data.Set (Set) import qualified Data.Set as S import Data.Traversable@@ -192,6 +198,21 @@   dataTypeOf _ = tableDataType   dataCast1 f = gcast1 f +instance (Tabular t, Binary t) => Binary (Table t) where+  put = reviews table B.put+  get = view table <$> B.get++instance (Tabular t, Serialize t) => Serialize (Table t) where+  put = reviews table C.put+  get = view table <$> C.get++instance (Typeable t, Tabular t, SafeCopy t) => SafeCopy (Table t) where+  putCopy = contain . reviews table safePut+  getCopy = contain $ view table <$> safeGet+  errorTypeName pt = show $ typeOf (undefined `asProxyTypeOf` pt)+    where asProxyTypeOf :: a -> p a -> a+          asProxyTypeOf a _ = a+ fromListConstr :: Constr fromListConstr = mkConstr tableDataType "fromList" [] Prefix @@ -334,13 +355,17 @@  -- | Insert a row into a relation, removing collisions. insert :: Tabular t => t -> Table t -> Table t-insert t0 r = case autoTab t0 of+insert t r = snd $ insert' t r++-- | Insert a row into a relation, removing collisions.+insert' :: Tabular t => t -> Table t -> (t, Table t)+insert' t0 r = case autoTab t0 of   Just p -> case r of     EmptyTable -> go (p emptyTab)     Table m    -> go (p m)   Nothing -> go t0   where-  go t = case delete t r of+  go t = (,) t $ case delete t r of     EmptyTable -> singleton t     Table m -> Table $ runIdentity $ forTab m $ \k i -> Identity $ case i of       PrimaryMap idx          -> primarily k $ PrimaryMap $ idx & at (fetch k t) ?~ t
tables.cabal view
@@ -1,6 +1,6 @@ name:          tables category:      Data, Lenses-version:       0.2+version:       0.3 license:       BSD3 cabal-version: >= 1.8 license-file:  LICENSE@@ -44,11 +44,14 @@ library   build-depends:     base                 >= 4.3 && < 5,+    binary               >= 0.5 && < 0.6,+    cereal               >= 0.3 && < 0.4,     comonad              >= 3   && < 4,     containers           >= 0.4 && < 0.6,     hashable             >= 1.1 && < 1.3,     lens                 >= 3.8 && < 4,     profunctors          >= 3.2 && < 4,+    safecopy             >= 0.6.3 && < 0.9,     transformers         >= 0.2 && < 0.4,     transformers-compat  >= 0.1 && < 1,     unordered-containers == 0.2.*