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 +1/−1
- src/Data/Function/Memoize.hs +63/−24
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