- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 TemplateHaskell 函数 variablesInScope::Q [Name]
,它返回范围内所有变量的 Name
列表。 TemplateHaskell 显然可以使用此信息来实现诸如 reify::Name -> Q Info
和 lookupValueName::String -> Q (Maybe Name)
之类的函数。
我想要的功能是否存在于某个地方而我只是忽略了它?或者它可以以某种方式轻松构建吗?
最佳答案
不幸的是,您无法单独使用 TH
来完成此操作。尝试使用 haskell-src-meta
将 Haskell 模块解析为 TH AST
。
不过,它需要 Q
monad 的 IO 功能来加载模块。
请引用https://ghc.haskell.org/trac/ghc/ticket/9699#ticket查看当前的粗略规范
(1) Extend ModuleInfo (obtained from reifyModule) to ModuleInfo [Module] [Name], where [Module] is still the import list and [Name] contains the module's list of exported names.
(2) Add thisModule :: Q Module producing the current Module.
(3) Add topLevelNames :: Q [Name] producing a list of top-level names (both exported and non-exported) bound in the current module that would be visible to reify.
(4) Add nestedNames :: Q [Name] (in need of a better name) producing a list of the non-top-level (nested) names visible to reify in this context.
(5) Add parentNames :: Q [Name] (also in need of a better name) producing a list of the names immediately associated with the current splicing context, if available. For example, foo, bar :: $(typeSplice) would see [foo, bar], foo = $(exprSplice) would see [foo], and $(topLevelDecSplice) would see [].
(6) Optional Add isTopLevel :: Name -> Q Bool to detect whether a name is bound at the top level (of the current module?). Something like this could alternately be accomplished by searching through topLevelNames.
关于haskell - 使用 TemplateHaskell 列出命名空间中的所有名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394199/
在我的 Haskell 项目之一的 RuzzSolver 中使用 TemplateHaskell 时,我遇到了内存消耗问题。 Sources of RuzzSolver are available o
这个导入: import Data.Singletons.TH ( FalseSym0, FromEnum, MaxBound, MinBound,
Here's the tutorial I'm working from . 他有一个例子,tupleReplicate ,它返回一个函数,该函数接受一个值并复制它: tupleReplicate :
如果我有 Name 在 TemplateHaskell 中并想找出它命名的变量的值,前提是该变量被声明为文字,可以这样做吗? var = "foo" -- Can `contentsOf` be de
我正在尝试编写一个 Lift 实例,它不仅可以提升构造函数,还可以提升其类型变量。例如,以 Proxy a 为例。我需要一个 Lift 实例,这样当拼接 lift (Proxy @Int) 时,GHC
如果使用副作用,是否有任何适当的方法可以使 TH 的功能安全?说,我想要一个在编译时调用 git 并生成版本字符串的函数: {-# LANGUAGE TemplateHaskell #-} modul
因此,大多数 TemplateHaskell 的准引号都有一个选项,您可以从文件中读取准引号字符串,而不是像 [quoter|... some code ...|] 这样在括号中输入它。 . 我想知道
我想要一个 TemplateHaskell 函数 variablesInScope::Q [Name],它返回范围内所有变量的 Name 列表。 TemplateHaskell 显然可以使用此信息来实
我正在用 Haskell 编写一个程序,它涉及很多括号。因此,为了清理这个丑陋的困惑局面,我使用了几次 $ 运算符以使其更易于阅读。例如: longFunc arg1 (anotherFunc (ye
是否可以在运行时生成并运行 TemplateHaskell 生成的代码? 使用 C,在运行时,我可以: 创建函数的源代码, 调用 gcc 将其编译为 .so (linux)(或使用 llvm 等),
我想要我的 TemplateHaskell 表达式,它使用 IO 并依赖于文件 MyDependency.txt , 在更改该文件时重新计算。 因此我使用 addDependentFile "MyDe
我正在寻找一种方法将有效的 Haskell 表达式代码字符串编译为 TH Exp . 例如,如果存在适当的函数,我希望它的行为如下: > $(theFunctionImLookingFor "\a -
我正在编写一些 TemplateHaskell 来将 QuickCheck 样式规范串在一起。我要求每个包含属性的模块都导出一个名为“axiom_set”的符号。然后,我的 checkAxioms 函
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个简单的模板 Haskell 程序,它打印当前模块的名称(主要,这里): {-# LANGUAGE TemplateHaskell #-} module Main ( main ) where
我是一名优秀的程序员,十分优秀!