我想对具有多个不同参数的函数使用memoization
window.contentViewController = yourController;
到目前为止我尝试了什么:
function :: (Int, Int) -> [[Int]] -> Int
但是,它没有按预期工作 - 我收到的信息是:
使用'!'时没有(Data.Array.Ix [[Int]])的实例
答案 0 :(得分:0)
我碰巧知道有一个Data.Function.Memoize软件包肯定会让这件事变得更容易。
在您的情况下,我会在此包中使用带有类型签名的memoize2
函数
memoize2 :: (Memoizable a, Memoizable b) => (a -> b -> v) -> a -> b -> v
a = (Int, Int), b = [[Int]]
。以下实例将说服您满足类型约束:
Memoizable Int
Memoizable a => Memoizable [a]
(Memoizable a, Memoizable b) => Memoizable (a, b)
警告说:虽然我对这个包有一些好感,但它看起来不太便携或不可靠(如果你要用它来构建真实的东西)。可以在Hackage页面上找到以下声明:
请注意,此样式中的大多数memoization依赖于关于非严格性(如懒惰)的实现的假设,这些假设不是由语义保证的。但是,它出现才能正常工作。