我正在阅读pozorvlak在Template Haskell上发布的婴儿步骤帖子,试图自己理解它,我发现了这一部分:
回想一下,我们试图以编程方式生成表单的声明
data Fred = Fred.让我们用quasiquoting来试试吧.由于调用TH代码的限制,我们必须将它放在自己的模块中,所以让我们将以下内容放在Keyword.h中,以便编译器可以找到它:Run Code Online (Sandbox Code Playgroud)module Keyword (keyword) where import Language.Haskell.TH.Syntax keyword name = [d| data $(name) = $(name) |]现在编译:
Run Code Online (Sandbox Code Playgroud)Prelude> :l Keyword.hs [1 of 1] Compiling Keyword ( Keyword.hs, interpreted ) Keyword.hs:6:24: parse error on input `$('
这跟我打了个响铃,看起来和我最近读到的其他东西一样,模板Haskell包文档:
对于动态绑定的thing(
NameS),我们可能希望它们以依赖于上下文的方式,因此我们再次不需要名称空间.例如:Run Code Online (Sandbox Code Playgroud)let v = mkName "T" in [| data $v = $v |]这里我们
Name对类型构造函数和数据构造函数使用相同的
嗯,这几乎是一样的,让我们看看我能不能这样做:
module Example where
import Language.Haskell.TH
let v = mkName "T" in [| data $v …Run Code Online (Sandbox Code Playgroud)