gpt4 book ai didi

haskell - 模板 Haskell 自定义准引号中的变量

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

一个例子胜过一千个字。这是一个非常简单的 quasi quoter我刚化妆。

import Language.Haskell.TH.Quote
import Language.Haskell.TH.Syntax

quoter :: QuasiQuoter
quoter = QuasiQuoter { quotePat = parse }
where
parse :: String -> Q Pat
parse ('$':x) = pure (VarP (mkName x))
parse "_" = pure WildP
parse _ = fail "Invalid pattern"

然后,在 GHCi 中使用它

ghci> :set -XQuasiQuotes
ghci> [quoter|_|] = 2
ghci> [quoter|$x|] = 2
ghci> x
error: Variable not in scope: x

我希望 2 绑定(bind)到 x那么:有什么方法可以在我们可以再次使用的自定义准引号中引入变量模式吗?请注意,我的实际用例比上面的用例要复杂得多 - parse 实际做了一些实质性的工作。

编辑

以下作品:

 ghci> inc [quoter|$x|] = x + 1
ghci> inc 2
3

下面的不是

 ghci> let [quoter|$x|] = 1 in x
error: Variable not in scope: x

这是 GHCi 中的错误吗?

最佳答案

这现在已在 GHC 8.2 中修复(参见 this commit)。

关于haskell - 模板 Haskell 自定义准引号中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42967102/

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