gpt4 book ai didi

haskell - 从 Q monad 中提取值(value)环境

转载 作者:行者123 更新时间:2023-12-02 15:32:23 24 4
gpt4 key购买 nike

在 Template Haskell 中,Q monad 是所有魔法发生的地方。然而,Q 的 API 相当有限。我想要一个 valueNameStore::Q (String -> Maybe Name) 类型的值,它基本上捕获了功能 lookupValueName :: String -> Q (Maybe Name)但在绑定(bind)时可以存储可用的变量。

我认为这在理论上是合理的:如果我针对共享常量状态(即我最初执行时 Q 的状态的快照)执行查找,则不需要对查找进行排序。在 valueNameStore 上调用了绑定(bind)。

<小时/>

如果这不可能,是否有任何方法可以以不安全的方式强制它通过?我愿意降低自己的水平,接受任何涉及 unsafePerformIO 的黑客攻击...

最佳答案

答案基本上是否定的。如果您可以以某种方式枚举范围内的名称,则可能有一些不合理的方法来执行此操作。虽然您认为具有您建议的类型和语义的操作是完全合理的,但这并不意味着它可以(合理地)从提供的接口(interface)实现,即使使用 unsafePerformIO 也是如此。

基本上,从字符串到Name的映射是可变的。您想要做的事情需要拍摄该可变字典的快照。该 API 不提供此类功能,而且据我所知,它也不为您提供手动复制数据的工具。尝试使用 unsafePerformIO 只会导致您在计算表达式时获得映射中的任何绑定(bind),如果您更改了范围,则该绑定(bind)将与您调用时的绑定(bind)不同Q 操作。

关于haskell - 从 Q monad 中提取值(value)环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965085/

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