gpt4 book ai didi

haskell - 在 Haskell 中是否有一种自动内存全局多态值的方法?

转载 作者:行者123 更新时间:2023-12-04 03:07:40 25 4
gpt4 key购买 nike

多态“常量”,如 5 :: Num a => a , 不是真正的常量,而是字典参数的函数。因此,如果你定义

primes :: Num n => [n]
primes = ...

当然,不好的例子,这里没有充分的理由让它多态......我真正感兴趣的是,如果你尝试全局内存一个非平凡的多态函数,例如 memo-trie s。
那么这个序列将不会在来自不同站点的调用之间共享,这在性能方面并不好。 (这难道不是 Haskell 标准赋予我们可怕的单态性限制的主要原因吗?)

我可以看到如何强制共享的唯一方法是为约束类的每个实例设置一个单态“标签”。例如。
erastothenes :: Num n => [n]
erastothenes = ...

class (Num n) => HasPrimes n where
-- | @'primes' ≡ 'erastothenes'@
primes :: [n]

integerPrimes :: [Integer]
integerPrimes = erastothenes

instance HasPrimes Integer where
primes = integerPrimes

......这在优雅方面并不好。

有没有更好的方法来实现这样的内存?

最佳答案

由于相当技术原因,这是相当不可能的。类型类是开放的,所以多态常量在编译时不一定“看到”有多少类型满足约束,因此它不能分配那么多单态 thunk。另一方面,类型类当然看不到它可能生成的所有可能常量,因此单态 thunk 不能在类型类字典中分配。

您将必须明确提及您希望分配单态 thunk 的任何类型。

关于haskell - 在 Haskell 中是否有一种自动内存全局多态值的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25057803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com