Как перебирать модули в пакете Cabal

Как лучше всего перебрать все модули (файлы) в данном пакете? Конкретно, предположим, что у меня есть

  1. исполняемый файл под названием «runThis»
  2. кабальный пакет P с файлами F1.hs, F2.hs, ..., Fn.hs

Как проще всего выполнить:

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)

Спасибо!


person Ranjit Jhala    schedule 19.12.2011    source источник
comment
Это сообщение списка рассылки выглядит актуальным: opensubscriber.com/message/haskell [email protected]/   -  person Daniel Wagner    schedule 20.12.2011
comment
Что за программа runThis? Будет ли что-то вроде $ for file in *.hs; do runThis $file; done; делать то, что вы хотите?   -  person Daniel Fischer    schedule 20.12.2011
comment
Спасибо @DanielWagner, это помогает. Однако оказывается, что он пропускает скрытые модули, не упомянутые в .cabal (что я также хочу), поэтому на самом деле проще сделать что-то вроде того, что предлагает Даниэль Фишер (плюс использование, скажем, filemanip для рекурсивного поиска всех файлов * .hs. ..)   -  person Ranjit Jhala    schedule 20.12.2011
comment
@DanielWagner: поскольку ваш комментарий был ответом, возможно, вам следует его отправить?   -  person sclv    schedule 22.03.2013


Ответы (1)


Из электронного письма Дункана Куттса:

  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 

Но при каких обстоятельствах будет вызываться эта функция? До сих пор
мне не удалось заставить клику вызывать эту функцию.

Он вызывает его при переходе и ищет модуль Abc (т.е. Abc.hs или .lhs), а если не находит, то просматривает список препроцессоров и ищет соответствующие файлы, т.е. Abc.foo.

person Daniel Wagner    schedule 22.08.2013