packages feed

memoize 1.0.0 → 1.1.0

raw patch · 2 files changed

+64/−25 lines, 2 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

+ Data.Function.Memoize: instance (GHC.Real.Integral a, Data.Function.Memoize.Class.Memoizable a) => Data.Function.Memoize.Class.Memoizable (GHC.Real.Ratio a)
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable Data.Version.Version
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable Data.Void.Void
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable GHC.Types.Word
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable GHC.Word.Word16
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable GHC.Word.Word32
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable GHC.Word.Word64
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable GHC.Word.Word8
+ Data.Function.Memoize: instance Data.Function.Memoize.Class.Memoizable a => Data.Function.Memoize.Class.Memoizable (Data.Complex.Complex a)

Files

memoize.cabal view
@@ -1,6 +1,6 @@ cabal-version:  2.2 name:           memoize-version:        1.0.0+version:        1.1.0 license:        BSD-3-Clause license-file:   LICENSE stability:      experimental
src/Data/Function/Memoize.hs view
@@ -33,6 +33,10 @@   deriveMemoizable, deriveMemoizableParams, deriveMemoize, ) where +#if MIN_VERSION_base(4,16,0)+#  define COMPAT_HAS_SOLO+#endif+ #if __GLASGOW_HASKELL__ < 710 import Control.Applicative #endif@@ -42,6 +46,15 @@ import Data.Function.Memoize.Class import Data.Function.Memoize.TH +import qualified Data.Complex   as Complex+import qualified Data.Ratio     as Ratio+#ifdef COMPAT_HAS_SOLO+import qualified Data.Tuple     as Tuple+#endif+import qualified Data.Version   as Version+import qualified Data.Void      as Void+import qualified Data.Word      as Word+ -- | Memoize a two argument function memoize2 ∷ (Memoizable a, Memoizable b) ⇒            (a → b → v) → a → b → v@@ -130,29 +143,6 @@ traceMemoize f = memoize (\a → traceShow a (f a))  ------- Derived instances------deriveMemoizable ''()-deriveMemoizable ''Bool-deriveMemoizable ''Ordering-deriveMemoizable ''Maybe-deriveMemoizable ''Either-deriveMemoizable ''[]--deriveMemoizable ''(,)-deriveMemoizable ''(,,)-deriveMemoizable ''(,,,)-deriveMemoizable ''(,,,,)-deriveMemoizable ''(,,,,,)-deriveMemoizable ''(,,,,,,)-deriveMemoizable ''(,,,,,,,)-deriveMemoizable ''(,,,,,,,,)-deriveMemoizable ''(,,,,,,,,,)-deriveMemoizable ''(,,,,,,,,,,)-deriveMemoizable ''(,,,,,,,,,,,)----- --- Binary-tree based memo caches --- @@ -181,7 +171,7 @@     }   deriving Functor --- | A positive integer cache is represented as a little-ending bitwise+-- | A positive integer cache is represented as a little-endian bitwise --   trie type PosIntCache v = BinaryTreeCache v @@ -274,8 +264,41 @@  instance Memoizable Int where memoize = memoizeFinite instance Memoizable Char where memoize = memoizeFinite+instance Memoizable Word.Word where memoize = memoizeFinite+instance Memoizable Word.Word8 where memoize = memoizeFinite+instance Memoizable Word.Word16 where memoize = memoizeFinite+instance Memoizable Word.Word32 where memoize = memoizeFinite+instance Memoizable Word.Word64 where memoize = memoizeFinite  ---+--- Derived instances+---++deriveMemoizable ''()+deriveMemoizable ''Bool+deriveMemoizable ''Ordering+deriveMemoizable ''Maybe+deriveMemoizable ''Either+deriveMemoizable ''[]+deriveMemoizable ''Complex.Complex+deriveMemoizable ''Version.Version++#ifdef COMPAT_HAS_SOLO+deriveMemoizable ''Tuple.Solo+#endif+deriveMemoizable ''(,)+deriveMemoizable ''(,,)+deriveMemoizable ''(,,,)+deriveMemoizable ''(,,,,)+deriveMemoizable ''(,,,,,)+deriveMemoizable ''(,,,,,,)+deriveMemoizable ''(,,,,,,,)+deriveMemoizable ''(,,,,,,,,)+deriveMemoizable ''(,,,,,,,,,)+deriveMemoizable ''(,,,,,,,,,,)+deriveMemoizable ''(,,,,,,,,,,,)++--- --- Functions --- @@ -304,6 +327,22 @@       fcNil  ∷ v,       fcCons ∷ b → FunctionCache b v     }+++---+--- Other instances+---++instance Memoizable Void.Void where+  memoize f = f . Void.absurd++-- Data.Ratio.Ratio isn't derivable because it's an abstract type.+instance (Integral a, Memoizable a) => Memoizable (Ratio.Ratio a) where+  memoize f = memoize (f . inj) . prj+    where+      prj r      = (Ratio.numerator r, Ratio.denominator r)+      inj (n, d) = n Ratio.% d+  --- --- Example functions