packages feed

MemoTrie 0.6.6 → 0.6.7

raw patch · 2 files changed

+41/−4 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.MemoTrie: memoFix :: HasTrie a => ((a -> b) -> (a -> b)) -> (a -> b)

Files

MemoTrie.cabal view
@@ -1,5 +1,5 @@ Name:                MemoTrie-Version:             0.6.6+Version:             0.6.7 Cabal-Version:       >= 1.10 Synopsis:            Trie-based memo functions Category:            Data@@ -10,7 +10,7 @@   .   Project wiki page: <http://haskell.org/haskellwiki/MemoTrie>   .-  &#169; 2008-2015 by Conal Elliott; BSD3 license.+  &#169; 2008-2016 by Conal Elliott; BSD3 license. Homepage:            https://github.com/conal/MemoTrie Author:              Conal Elliott  Maintainer:          conal@conal.net
src/Data/MemoTrie.hs view
@@ -55,12 +55,14 @@   , memo, memo2, memo3, mup   , inTrie, inTrie2, inTrie3   -- , untrieBits-  , trieGeneric, untrieGeneric, enumerateGeneric, Reg   +  , trieGeneric, untrieGeneric, enumerateGeneric, Reg+  , memoFix   ) where  -- Export the parts of HasTrie separately in order to get the associated data -- type constructors, so I can define instances of other classes on them. +import Data.Function (fix) import Data.Bits import Data.Word import Data.Int@@ -168,6 +170,42 @@ memo2 = mup memo memo3 = mup memo2 +-- | Memoizing recursion. Use like `fix`.+memoFix :: HasTrie a => ((a -> b) -> (a -> b)) -> (a -> b)+memoFix h = fix (memo . h)++#if 0+-- Equivalently,++memoFix h = fix (\ f' -> memo (h f'))++memoFix h = f'+  where f' = memo (h f')++memoFix h = f'+ where+   f' = memo f+   f  = h f'+#endif++#if 0+-- Example++fibF :: (Integer -> Integer) -> (Integer -> Integer)+fibF _ 0 = 1+fibF _ 1 = 1+fibF f n = f (n-1) + f (n-2)++fib :: Integer -> Integer+fib = fix fibF++fib' :: Integer -> Integer+fib' = memoFix fibF++-- Try fib 30 vs fib' 30+#endif++ -- | Apply a unary function inside of a trie inTrie :: (HasTrie a, HasTrie c) =>           ((a  ->  b) -> (c  ->  d))@@ -685,4 +723,3 @@ liftSum :: Either (f a) (g a) -> (f :+: g) a  liftSum = either L1 R1 {-# INLINEABLE liftSum #-}-