Подтвердить что ты не робот

QuickCheck catch-22

Я работаю над проектом Haskell, и я начал с его организации следующим образом:

  • blah.hs содержит большую часть кода
  • blah_main.hs имеет основную программу
  • и blah_test.hs имеют тестовые примеры.

Проблема заключается в том, что ограничение функций, экспортируемых с помощью blah.hs, означает ограничение функций, которые могут быть проверены с помощью blah_test.hs. Есть ли хороший способ обойти эту проблему? Потому что я действительно хотел бы написать тестовый код для некоторых "внутренних" функций, которые не экспортируются с помощью blah.hs.

Спасибо, Ли

4b9b3361

Ответ 1

Переместите внутренние функции из модулей Blah.* в Blah.Internal.*. Вы можете скрыть внутренние модули от пользователей вашей библиотеки, указав их в поле other-modules в файле blah.cabal (вместо exposed-modules, где вы перечислите все модули, видимые для пользователей). Посмотрите Hakyll . Cabal file для примера.

Ответ 2

Я согласен с Михаилом над всеми, но в некоторых случаях это действительно невозможно сделать такой раскол. В таких случаях я бы рекомендовал использовать расширение CPP (C Pre-Processor) в следующих строках:

module Blah
    ( public
#if TEST
    , private
#endif
    ) where