如何在Cabal包中迭代模块

时间:2011-12-19 23:07:07

标签: haskell cabal cabal-install

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

  1. 一个名为“runThis”的可执行文件
  2. 包含文件F1.hs,F2.hs,...,Fn.hs
  3. 的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)

    谢谢!

1 个答案:

答案 0 :(得分:1)

来自Duncan Coutts'email

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

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

看起来不错。以下是如何完成它(例子来自于 用于PreProcess模块​​的Cabal haddock文档:

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