Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell模板为何使用AST_Haskell_Template Haskell - Fatal编程技术网

Haskell模板为何使用AST

Haskell模板为何使用AST,haskell,template-haskell,Haskell,Template Haskell,我一直在玩TemplateHaskell,我遇到了一个问题,基本上是 你做不到 keyword name = [d| data $(name) = $(name) |] 你必须做一些类似的事情 keyword name = return [DataD [] name [] [NormalC name []] []] where name' = mkName name 相反 显然,原因可能与一些打字问题有关。所以问题是,, 为什么模板Haskell使用复杂的AST而不仅仅是字符

我一直在玩TemplateHaskell,我遇到了一个问题,基本上是

你做不到

keyword name = [d| data $(name) = $(name) |]
你必须做一些类似的事情

keyword name = return [DataD [] name [] [NormalC name []] []] where
        name' = mkName name
相反

显然,原因可能与一些打字问题有关。所以问题是,, 为什么模板Haskell使用复杂的AST而不仅仅是字符串。如果
拼接正在返回一个简单字符串,并且类型检查将在扩展文件上进行?

是的,但是您可以对实际的AST vs字符串进行更有用的处理。考虑一些类似于这个字符串中的所有变量,这意味着你必须解析Haskell来做一些非常琐碎的事情,这实际上是少数情况下你不能只在名字中拼接的情况之一,尽管你必须使用像VARP和VARE这样的函数来获得正确的类型。