gpt4 book ai didi

haskell - 打印并执行字符串

转载 作者:行者123 更新时间:2023-12-04 10:20:17 25 4
gpt4 key购买 nike

我发现自己写了很多代码,比如

putStr "foo (bar 1) (bar 2) =
打印 $ foo (bar 1) (bar 2)

问题是,打印的消息可能与实际执行的代码不同步。显而易见的解决方案是自动生成此代码。

一种方法是将所有文本放在一个文件中,然后编写一个小程序来读取该文件并从中生成 Haskell 源代码。但另一种选择是使用 Template Haskell。

有人知道我将如何编写一个接受 String 的函数吗?并从中生成上述代码?我猜这应该很容易,但是没有很好的文档记录。

最佳答案

您可以使用 haskell-src-meta 解析 Haskell 代码包裹。这是一个快速示例,您可以如何将其与 Template Haskell 结合使用。

{-# LANGUAGE TemplateHaskell #-}

import Language.Haskell.TH
import Language.Haskell.TH.Quote
import Language.Haskell.Meta

runShow = QuasiQuoter
{ quoteExp = runShowQQ
, quotePat = undefined
, quoteType = undefined
, quoteDec = undefined
}

runShowQQ :: String -> Q Exp
runShowQQ s = do
let s' = s ++ " = "
Right exp = parseExp s
printExp = appE [|print|] (return exp)
infixApp [|putStr s'|] [|(>>)|] printExp

你会像这样使用它
{-# LANGUAGE QuasiQuotes #-}

[runShow|foo (bar 1) (bar 2)|]

关于haskell - 打印并执行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498642/

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