h$J8      !"#$%&'()*+,-./01234567 Safe-Inferredmemoize"A memoization class. An instance  T for some type T means that that . method can memoize for parameters of type T.None memoize To derive  instances for the given data types. In the simplest usage, to derive " for an algebraic datatype named T, write:  deriveMemoizable ''T -This assumes that all the type parameters of T0 that are not annotated with a kind other than * should be listed as requiring  instances in the instance context. For example, given a data type declared as ! data T a (b :: * -> *) c = ... %the generated instance will look like  instance ( a,  c) =>  (T a b c) where ... 0For more precise control over the context, use . N.B.: The TemplateHaskell: language extension must be enabled to use this function.memoizeLike 2 but takes a second argument, which is a list of 8s to specify which type parameters of the type should be mentioned in the context. For example, given the same definition for T as above, we can write " deriveMemoizableParams ''T [3]  to leave the first parameter of T out of the context and show only the third, yielding the instance  instance  c =>  (T a b c) where ...  N.B.: The TemplateHaskell: language extension must be enabled to use this function.memoizeIn cases where neither  nor  can figure out the right context for an instance declaration, one can declare the instance manually and use this function to derive the method body for ). For example, suppose that a data type T is defined as:  data T a b = T (a -> Bool) b For T a b to be memoizable,  a -> Bool) must be, and based on the instance for (->), this means that a must satisfy 9 and :, so ) cannot build the right context for the # instance. Instead, one can write:  instance (; a, : a, 9 a,  b) => 2 (T a b) where memoize = $(deriveMemoize ''T) None5memoizeMemoize a two argument functionmemoize!Memoize a three argument functionmemoize Memoize a four argument functionmemoize Memoize a five argument function memoizeMemoize a six argument function memoize!Memoize a seven argument function memoize, ?, @, and A.This can be used to make instances for finite types. For example, the instances for 8 and B are declared as:  instance Memoizable Int where memoize = memoizeFinite instance Memoizable Char where memoize = memoizeFinite         !"#$%&'()*+,-./0123456789:;<=>?@ABCABD>EFAGHAIJABKABLABMABN>?O#memoize-1.1.0-FVygUyEfd1AA4QwO4jgZjData.Function.MemoizeData.Function.Memoize.ClassData.Function.Memoize.TH Data.Functionfix MemoizablememoizederiveMemoizablederiveMemoizableParams deriveMemoizememoize2memoize3memoize4memoize5memoize6memoize7memoFixmemoFix2memoFix3memoFix4memoFix5memoFix6memoFix7 traceMemoize memoizeFinite$fMemoizableWord64$fMemoizableWord32$fMemoizableWord16$fMemoizableWord8$fMemoizableWord$fMemoizableChar$fMemoizableInt$fMemoizableInteger$fMemoizableFinite $fEqFinite$fBoundedFinite $fEnumFinite$fFunctorIntegerCache$fFunctorBinaryTreeCache$fMemoizable()$fMemoizableBool$fMemoizableOrdering$fMemoizableMaybe$fMemoizableEither$fMemoizable[]$fMemoizableComplex$fMemoizableVersion$fMemoizable(,)$fMemoizable(,,)$fMemoizable(,,,)$fMemoizable(,,,,)$fMemoizable(,,,,,)$fMemoizable(,,,,,,)$fMemoizable(,,,,,,,)$fMemoizable(,,,,,,,,)$fMemoizable(,,,,,,,,,)$fMemoizable(,,,,,,,,,,)$fMemoizableRatio$fMemoizableVoid$fMemoizable->$fMemoizable(,,,,,,,,,,,)ghc-prim GHC.TypesIntbaseGHC.EnumBoundedEnum GHC.ClassesEqGHC.ShowShow Debug.TracetracetoEnumfromEnumsuccpredChar