Как перебрать модули в пакете Cabal - PullRequest
1 голос
/ 20 декабря 2011

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

  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)

Спасибо!

1 Ответ

1 голос
/ 22 августа 2013

От Duncan Coutts ' 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.

...