gpt4 book ai didi

haskell - 为什么这个 Haskell 模板可以工作?

转载 作者:行者123 更新时间:2023-12-02 10:55:36 25 4
gpt4 key购买 nike

考虑这段代码:

magic :: String -> Q Expmagic s = [e| putStrLn s |]

现在,据我所知,这实际上不应该起作用。在牛津括号内,s 不在范围内。然而,上述显然工作得很好。

如果我们稍微改变一下这个例子,它现在就会严重崩溃:

magic :: Exp -> Q Expmagic (VarE n) = [e| putStrLn (nameBase n) |]

就像以前一样,我们有一个变量不在范围内。这一次,它坏了。但它不会提示变量不在范围内;相反,它提示某些未记录的类缺少实例。

有人知道这是怎么回事吗?

最佳答案

s is 在牛津括号内的范围内。基本上,您可以使用多种类型的值 - 那些带有 Lift 的值。实例 - 在引用的表达式内,它们将自动转换为适当的代码以在另一端重新创建相应的值。

例如,Lift instance for Integers只是构造相应的整数文字,而 instance for Maybe只需构建适当的构造函数应用程序即可。您甚至可以定义自己的 Lift 实例。

您收到“无实例”错误,因为 nName,无法Lift

关于haskell - 为什么这个 Haskell 模板可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588313/

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