packages feed

fastmemo 0.1.0.1 → 0.1.1

raw patch · 10 files changed

+107/−28 lines, 10 filesdep +containersdep ~basedep ~bytestringdep ~vectorPVP ok

version bump matches the API change (PVP)

Dependencies added: containers

Dependency ranges changed: base, bytestring, vector

API changes (from Hackage documentation)

+ Data.Function.FastMemo: AsList :: t -> AsList t
+ Data.Function.FastMemo: [unAsList] :: AsList t -> t
+ Data.Function.FastMemo: newtype AsList t

Files

fastmemo.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.35.0. -- -- see: https://github.com/sol/hpack  name:           fastmemo-version:        0.1.0.1+version:        0.1.1 synopsis:       Memoize functions on Generic types description:    Please see the README on GitHub at <https://github.com/davidspies/fastmemo#readme> category:       Memoization@@ -31,9 +31,11 @@       Data.Function.FastMemo.ByteString       Data.Function.FastMemo.Char       Data.Function.FastMemo.Class+      Data.Function.FastMemo.Containers       Data.Function.FastMemo.Instances       Data.Function.FastMemo.Int       Data.Function.FastMemo.Integer+      Data.Function.FastMemo.List       Data.Function.FastMemo.Natural       Data.Function.FastMemo.Ratio       Data.Function.FastMemo.Util@@ -44,10 +46,11 @@       src   ghc-options: -Wall   build-depends:-      base >=4.7 && <4.16-    , bytestring ==0.10.*+      base >=4.7 && <4.18+    , bytestring >=0.10 && <0.12+    , containers ==0.6.*     , utf8-string ==1.0.*-    , vector ==0.12.*+    , vector >=0.12 && <0.14   default-language: Haskell2010  test-suite fastmemo-test@@ -61,9 +64,10 @@   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N   build-depends:       QuickCheck-    , base >=4.7 && <4.16-    , bytestring ==0.10.*+    , base >=4.7 && <4.18+    , bytestring >=0.10 && <0.12+    , containers ==0.6.*     , fastmemo     , utf8-string ==1.0.*-    , vector ==0.12.*+    , vector >=0.12 && <0.14   default-language: Haskell2010
src/Data/Function/FastMemo.hs view
@@ -1,16 +1,16 @@-{-# OPTIONS_GHC -Wno-orphans #-}- -- | -- Straightforward function memoization library; -- see [Examples](https://github.com/davidspies/fastmemo/blob/master/test/Examples.hs) for example usage-module Data.Function.FastMemo (Memoizable (..), memoizeFixedLen, memo1, memo2, memo3, memo4, memo5, memo6, memo7) where+module Data.Function.FastMemo (AsList (..), Memoizable (..), memoizeFixedLen, memo1, memo2, memo3, memo4, memo5, memo6, memo7) where  import Data.Function.FastMemo.ByteString () import Data.Function.FastMemo.Char () import Data.Function.FastMemo.Class (Memoizable (..))+import Data.Function.FastMemo.Containers () import Data.Function.FastMemo.Instances () import Data.Function.FastMemo.Int () import Data.Function.FastMemo.Integer ()+import Data.Function.FastMemo.List (AsList (..)) import Data.Function.FastMemo.Natural () import Data.Function.FastMemo.Ratio () import Data.Function.FastMemo.Util (memoizeFixedLen)
src/Data/Function/FastMemo/ByteString.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE StandaloneDeriving #-} {-# OPTIONS_GHC -Wno-orphans #-}  module Data.Function.FastMemo.ByteString () where@@ -5,10 +7,9 @@ import qualified Data.ByteString as SBS import qualified Data.ByteString.Lazy as LBS import Data.Function.FastMemo.Class (Memoizable (..))+import Data.Function.FastMemo.List (AsList (..)) import Data.Function.FastMemo.Word () -instance Memoizable SBS.ByteString where-  memoize f = memoize (f . SBS.pack) . SBS.unpack+deriving via (AsList SBS.ByteString) instance Memoizable SBS.ByteString -instance Memoizable LBS.ByteString where-  memoize f = memoize (f . LBS.pack) . LBS.unpack+deriving via (AsList LBS.ByteString) instance Memoizable LBS.ByteString
src/Data/Function/FastMemo/Class.hs view
@@ -6,7 +6,6 @@  module Data.Function.FastMemo.Class (Memoizable (..)) where -import Data.List.NonEmpty (NonEmpty) import GHC.Generics  class Memoizable a where@@ -21,7 +20,7 @@   gMemoize f = gMemoize (f . M1) . unM1  instance GMemoize V1 where-  gMemoize _f = \case+  gMemoize _f = \case {}  instance GMemoize U1 where   gMemoize f = let fu = f U1 in \U1 -> fu@@ -43,7 +42,3 @@           R1 x -> fR x  instance (Memoizable a, Memoizable b) => Memoizable (a, b)--instance Memoizable a => Memoizable [a]--instance Memoizable a => Memoizable (NonEmpty a)
+ src/Data/Function/FastMemo/Containers.hs view
@@ -0,0 +1,34 @@+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Data.Function.FastMemo.Containers () where++import Data.Function.FastMemo.Class (Memoizable (..))+import Data.Function.FastMemo.Int ()+import Data.Function.FastMemo.List (AsList (..))+import Data.IntMap (IntMap)+import Data.IntSet (IntSet)+import Data.Map (Map)+import Data.Sequence (Seq)+import qualified Data.Sequence as Seq+import Data.Set (Set)+import Data.Tree (Tree)++deriving via AsList (Map a b) instance (Ord a, Memoizable a, Memoizable b) => Memoizable (Map a b)++deriving via AsList (Set a) instance (Ord a, Memoizable a) => Memoizable (Set a)++deriving via AsList (IntMap b) instance (Memoizable b) => Memoizable (IntMap b)++deriving via AsList IntSet instance Memoizable IntSet++deriving via AsList (Seq a) instance Memoizable a => Memoizable (Seq a)++instance Memoizable a => Memoizable (Seq.ViewL a)++instance Memoizable a => Memoizable (Seq.ViewR a)++instance Memoizable a => Memoizable (Tree a)
src/Data/Function/FastMemo/Instances.hs view
@@ -6,6 +6,7 @@ import Data.Function.FastMemo.Char () import Data.Function.FastMemo.Class (Memoizable) import Data.Function.FastMemo.Int ()+import Data.Function.FastMemo.List () import Data.Functor.Identity (Identity) import Data.Proxy (Proxy) import Data.Version (Version)
+ src/Data/Function/FastMemo/List.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE UndecidableInstances #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Data.Function.FastMemo.List (AsList (..)) where++import Data.Function.FastMemo.Class (Memoizable (..))+import Data.List.NonEmpty (NonEmpty)+import GHC.Exts+import qualified GHC.Exts as IsList++instance Memoizable a => Memoizable [a]++instance Memoizable a => Memoizable (NonEmpty a)++newtype AsList t = AsList {unAsList :: t}++instance (IsList t, Memoizable (IsList.Item t)) => Memoizable (AsList t) where+  memoize f = memoize (f . AsList . IsList.fromList) . IsList.toList . unAsList
src/Data/Function/FastMemo/Natural.hs view
@@ -5,6 +5,7 @@ import Data.Bits (shiftL, shiftR, (.|.)) import Data.Foldable (foldl') import Data.Function.FastMemo.Class (Memoizable (..))+import Data.Function.FastMemo.List () import Data.Function.FastMemo.Word () import Data.List.NonEmpty (NonEmpty (..)) import Data.Word (Word8)
src/Data/Function/FastMemo/Vector.hs view
@@ -1,17 +1,17 @@+{-# LANGUAGE DerivingVia #-}+{-# LANGUAGE StandaloneDeriving #-} {-# OPTIONS_GHC -Wno-orphans #-}  module Data.Function.FastMemo.Vector () where  import Data.Function.FastMemo.Class (Memoizable (..))+import Data.Function.FastMemo.List (AsList (..)) import qualified Data.Vector as V import qualified Data.Vector.Storable as SV import qualified Data.Vector.Unboxed as UV -instance Memoizable a => Memoizable (V.Vector a) where-  memoize f = memoize (f . V.fromList) . V.toList+deriving via AsList (V.Vector a) instance Memoizable a => Memoizable (V.Vector a) -instance (SV.Storable a, Memoizable a) => Memoizable (SV.Vector a) where-  memoize f = memoize (f . SV.fromList) . SV.toList+deriving via AsList (SV.Vector a) instance (SV.Storable a, Memoizable a) => Memoizable (SV.Vector a) -instance (UV.Unbox a, Memoizable a) => Memoizable (UV.Vector a) where-  memoize f = memoize (f . UV.fromList) . UV.toList+deriving via AsList (UV.Vector a) instance (UV.Unbox a, Memoizable a) => Memoizable (UV.Vector a)
test/Spec.hs view
@@ -7,8 +7,14 @@ import Data.Function.FastMemo import Data.Functor (($>)) import Data.Int (Int16, Int32, Int64, Int8)+import Data.IntMap (IntMap)+import Data.IntSet (IntSet)+import Data.Map (Map) import Data.Proxy (Proxy (Proxy)) import Data.Ratio (Ratio)+import Data.Sequence (Seq)+import Data.Set (Set)+import qualified Data.Tree as Containers import Data.Word (Word16, Word32, Word64, Word8) import Examples (Color (Color), Tree (Leaf, Node), fibonacci) import Numeric.Natural (Natural)@@ -60,7 +66,7 @@ prop_bigIntegerMemoizesId :: Property prop_bigIntegerMemoizesId =   forAllShrink-    (genBigBound >>= \b -> choose (- b, b))+    (genBigBound >>= \b -> choose (-b, b))     shrink     prop_memoizesId @@ -137,6 +143,24 @@  prop_ratioMemoizesId :: (Integral a, Memoizable a, Show a) => Ratio a -> Property prop_ratioMemoizesId = prop_memoizesId++prop_intsetMemoizesId :: IntSet -> Property+prop_intsetMemoizesId = prop_memoizesId++prop_intmapMemoizesId :: (Eq a, Memoizable a, Show a) => IntMap a -> Property+prop_intmapMemoizesId = prop_memoizesId++prop_setMemoizesId :: (Ord a, Memoizable a, Show a) => Set a -> Property+prop_setMemoizesId = prop_memoizesId++prop_mapMemoizesId :: (Ord a, Memoizable a, Show a, Eq b, Memoizable b, Show b) => Map a b -> Property+prop_mapMemoizesId = prop_memoizesId++prop_seqMemoizesId :: (Eq a, Memoizable a, Show a) => Seq a -> Property+prop_seqMemoizesId = prop_memoizesId++prop_containerTreeMemoizesId :: (Eq a, Memoizable a, Show a) => Containers.Tree a -> Property+prop_containerTreeMemoizesId = prop_memoizesId  deriving instance Eq Color