2011-12-19 6 views
1

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

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

Что проще всего способ:

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

?

Я думал, что я мог бы попробовать --with-компилятор, но это не удается с

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

(Другой вариант выглядит настраивая Setup.lhs - но в идеале я хотел бы, чтобы захватить процесс сборки и используйте «runThis» вместо, скажем, ghc)

Спасибо!

+0

Это сообщение списка рассылки выглядит релевантным: http://www.opensubscriber.com/message/[email protected]/12911379.html –

+1

Какая программа 'runThis'? Будет что-то вроде '$ для файла в * .hs; сделать runThis $ file; сделано, «делай, что хочешь? –

+0

Спасибо @ Даниэль Вагнер, это делает трюк. Оказывается, несмотря на то, что он пропускает скрытые модули, не упомянутые в .cabal (что я также хочу), так что на самом деле проще сделать что-то вроде того, что предлагает Даниэль Фишер (плюс использование, скажем, filemanip, рекурсивно найти все * .hs-файлы. ..) –

ответ

1

С Дункан Коуттс email:

  1. Вопрос: Как добавить препроцессор? Я попытался

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

Это выглядит правильно. Вот как завершить его (пример взят из Cabal пикши документы для модуля 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.

Смежные вопросы