4
比方说,我有一个名为Item
模块,包含:哈斯克尔 - 自动使用变量从导入模块
module Item
(routes) where
routes = ["test1","test2","test3"]
而且Main
模块中我有:
import qualified Item as I
routes = I.routes ++ ["test4", "test5"]
我在想,如果有可能在编译时,使ghc
动态地遍历所有导入的模块,并且如果它们导出一个名为routes的变量,则将它附加到Main
模块中的routes变量。所以基本上是这样的:
import qualified Item as I
import qualified User as U --this one exports routes also
import qualified NoRoutes as NR --this one doesn't have any routes
routes = ["test4","test5"]
,并在编译时,最终的结果将是routes = I.routes ++ U.routes ++ ["test4","test5"]
我不知道,如果模板哈斯克尔做这样的事情。 感谢您的帮助!
感谢您的回答。你有什么建议如何与TH做到这一点?因为我试图通过文档,但我无法找到解释修改模块导入的地方。而且我想如果我使用TH,代码看起来会更复杂一点吗? –
@ft_它不允许修改模块导入。但是,我记得它允许拼接(宏)检查编译器状态,包括可见变量的(限定)名称。所以你可能会写宏,即给定一个变量名,将会读取所有可见变量的名字,并产生像'local_routes = concat [Module1.route,Module2.route .... ModuleN.route]这样的行' – permeakra