Мне нужно создать приложение, которое зависит от ОС. Например, я ищу по каталогу, и если я вижу, что какой-то элемент является символической ссылкой (в Linux), я просто пропускаю их и перехожу. Чтобы проверить это, я использую функцию System.Posix.Files.isSymbolicLink, которая поставляется в пакете "unix". Проблема заключается в том, что этот пакет не будет собираться в Windows, и я должен как-то обойти это ограничение, когда приложение собирается в Windows. Я попробовал этот трюк:
1) Создан дополнительный файл: ./System/Posix/Files.hs, где выставлена функция isSymbolicLink , которая всегда возвращает False .
2) Обновлен файл .cabal:
if os(windows)
other-modules: System.Posix.Files
else
build-depends: unix
Но, несмотря на мою конфигурацию, cabal build всегда собирает мой /System/Posix/Files.hs, так как у меня import System.Posix.Files в моем main.hs:
Предварительная обработка исполняемых файлов для test-1.1.1 ...
Строительный тест-1.1.1 ...
[1 из 2] Компиляция System.Posix.Files (System / Posix / Files.hs, dist / build / test / test-tmp / System / Posix / Files.o)
[2 из 2] Компиляция Main (main.hs, dist / build / test / test-tmp / Main.o)
Связывание dist / build / test / test ...
Таким образом, даже если я собираюсь использовать Linux, приложение получает мою пустую функцию isSymbolicLink вместо функций, предоставляемых пакетом "unix". Как я могу сказать, чтобы cabal не включал этот файл и использовал модуль из пакета "unix" при сборке на linux? А может, есть какой-то другой подход к решению таких проблем?