packages feed

bookkeeper 0.2.1.1 → 0.2.2.0

raw patch · 5 files changed

+73/−1 lines, 5 filesdep +criteriondep +data-default-class

Dependencies added: criterion, data-default-class

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.2.2.0++* Add 'Data.Default' instance+ # 0.2.1.0  * Add 'Gettable', 'Settable', 'Modifiable' type synonyms.
+ bench/Main.hs view
@@ -0,0 +1,36 @@+module Main where++import Bookkeeper+import Criterion.Main++type PersonB = Book '[ "name" :=> String, "age" :=> Int ]+data PersonR = PersonR { name ::  String, age :: {-# NOUNPACK #-} Int } deriving (Eq, Show)++pb :: PersonB+pb = emptyBook+   & #name =: ""+   & #age =: 0++pr :: PersonR+pr = PersonR+   { name = ""+   , age = 0+   }++modB :: Int -> PersonB+modB 0 = pb+modB n = modB (n - 1) & #age %: (+ n)++modR :: Int -> PersonR+modR 0 = pr+modR n = let p = modR (n - 1) in p { age = age p + n }++main :: IO ()+main = defaultMain+  [ bgroup "modB" [ bench "10" $ nf (\x -> get #age $ modB x) 10+                  , bench "100" $ nf (\x -> get #age $ modB x) 100+                  ]+  , bgroup "modR" [ bench "10" $ nf (\x -> age $ modR x) 10+                  , bench "100" $ nf (\x -> age $ modR x) 100+                  ]+  ]
bookkeeper.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           bookkeeper-version:        0.2.1.1+version:        0.2.2.0 synopsis:       Anonymous records and overloaded labels description:    Please see README.md category:       Data Structures, Records@@ -34,6 +34,7 @@   build-depends:       base >= 4.9 && < 4.10     , type-level-sets+    , data-default-class   exposed-modules:       Bookkeeper       Bookkeeper.Internal@@ -48,6 +49,7 @@   build-depends:       base >= 4.9 && < 4.10     , type-level-sets+    , data-default-class     , base >=4.9 && < 4.10 , bookkeeper , markdown-unlit   default-language: Haskell2010 @@ -61,6 +63,7 @@   build-depends:       base >= 4.9 && < 4.10     , type-level-sets+    , data-default-class     , doctest >= 0.9 && < 0.12     , Glob >= 0.7 && < 0.8     , yaml == 0.8.*@@ -79,10 +82,26 @@   build-depends:       base >= 4.9 && < 4.10     , type-level-sets+    , data-default-class     , bookkeeper     , hspec > 2 && < 3     , QuickCheck >= 2.8 && < 2.9   other-modules:       BookkeeperSpec       Doctest+  default-language: Haskell2010++benchmark bench+  type: exitcode-stdio-1.0+  main-is: Main.hs+  hs-source-dirs:+      bench+  default-extensions: AutoDeriveTypeable ConstraintKinds DataKinds DefaultSignatures DeriveFunctor DeriveGeneric DeriveFoldable DeriveTraversable FlexibleContexts FlexibleInstances FunctionalDependencies GADTs MultiParamTypeClasses KindSignatures TypeInType OverloadedStrings RankNTypes ScopedTypeVariables TypeApplications TypeFamilies TypeOperators OverloadedLabels MagicHash+  ghc-options: -Wall -O2+  build-depends:+      base >= 4.9 && < 4.10+    , type-level-sets+    , data-default-class+    , bookkeeper+    , criterion   default-language: Haskell2010
src/Bookkeeper/Internal.hs view
@@ -6,6 +6,7 @@ import GHC.Generics (Generic) import qualified Data.Type.Map as Map import GHC.TypeLits (Symbol, KnownSymbol)+import Data.Default.Class (Default(..)) import Data.Kind (Type) import Data.Type.Map (Map, Mapping((:->))) import Data.Monoid ((<>))@@ -50,6 +51,14 @@ instance Monoid (Book' '[]) where   mempty = emptyBook   _ `mappend` _ = emptyBook++instance Default (Book' '[]) where+  def = emptyBook++instance ( Default (Book' xs)+         , Default v+         ) => Default (Book' ((k :=> v) ': xs)) where+  def = Book (Map.Ext Map.Var def (getBook def))  -- | A book with no records. You'll usually want to use this to construct -- books.
test/BookkeeperSpec.hs view
@@ -31,6 +31,10 @@              = p & #name %: fmap toUpper       get #name p' `shouldBe` "JULIAN K. ARNI" +    it "allows type-chaging update" $ do+      let p' = p & #name %: length+      get #name p' `shouldBe` 14+     it "allows extension" $ do       let p' = #email =: "jkarni<at>turingjump<dot>com" $ p       get #email p' `shouldBe` ("jkarni<at>turingjump<dot>com" :: String)