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 +5/−0
- src/Data/Table.hs +27/−2
- tables.cabal +4/−1
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.*