1

迭代给定包中所有模块(文件)的最佳方法是什么?具体来说,假设我有

  1. 一个名为“runThis”的可执行文件
  2. 带有文件 F1.hs、F2.hs、...、Fn.hs 的 cabal 包 P

什么是最简单的执行方法:

runThis F1.hs
runThis F2.hs
...
runThis Fn.hs 

?

我想我可以尝试 --with-compiler 但失败了

cabal: The program ghc version >=6.4 is required but the version of runThis

(另一个选项看起来像调整 Setup.lhs ——但理想情况下,我想劫持构建过程并使用“runThis”而不是 ghc)

谢谢!

4

1 回答 1

1

来自 Duncan Coutts 的电子邮件

  1. 问题:如何添加预处理器?我努力了

    main = 
       defaultMainWithHooks 
              simpleUserHooks{hookedPreProcessors=[("foo",transformation)]} 
    
    transformation :: BuildInfo -> LocalBuildInfo -> PreProcessor 
    

看起来是对的。以下是完成它的方法(示例取自 Cabal haddock 文档的 PreProcess 模块):

transformation _ _ = 
  PreProcessor { 
    platformIndependent = True, 
    runPreProcessor = 
      mkSimplePreProcessor $ \inFile outFile verbosity -> do 
        fail $ "transformation: " ++ inFile ++ " " ++ outFile 
  } 

它工作正常:

runghc Setup.hs build 
Preprocessing library foo-1.0... 
Setup.hs: transformation: Abc.foo dist/build/Abc.hs 

但是什么情况下会调用这个函数呢?到目前为止,
我还没有成功让 cabal 调用这个函数。

它会在查找模块时调用它Abc(即Abc.hs.lhs),如果没有找到它,它将检查预处理器列表并查找相应的文件,即Abc.foo.

于 2013-08-22T18:25:45.450 回答