Создание пользовательских флагов в Haskell

#haskell #compilation #compiler-flags #hpack

#haskell #Сборник #компилятор-флаги #hpack

Вопрос:

У меня есть набор тестов, который запускает одни и те же тестовые примеры с двумя бэкэндами: в памяти и реальным, я пытаюсь создать функцию, которая запускает реальный только при наличии флага.

Я видел это время от времени в Prelude, но я не могу заставить это работать.

Я бы более или менее выглядел следующим образом:

 onFullSuite :: Spec -> Spec
#if defined(RUN_FULL_SUITE)
onFullSuite = id
#else
onFullSuite = xdescribe "Only on full test suite run"
#endif
  

Есть ли у вас какие-либо намеки на недостающие части?

Комментарии:

1. Как вы это скомпилируете?

2. Вы добавили {-# LANGUAGE CPP #-} в начало файла?

Ответ №1:

Это двухэтапный процесс:

  • создайте флаг cabal
  • условно определите его как ghc-option
 flags:
  run-full-suite:
    manual: true
    default: false


library:
  source-dirs: src
  when:
  - condition: (flag(run-full-suite))
    then:
      cpp-options: -DRUN_FULL_SUITE
    else: {}