Как написать независимый от платформы код в Haskell (ghc)
В Hackage есть несколько специфичных для платформы библиотек, которые я хотел бы использовать (например, inotify, kqueue). Однако документация о том, как переключаться между платформами с использованием условной компиляции, кажется немного редкими. У меня возникли проблемы с поиском соответствующих документов...
Надеюсь, что документирование здесь может быть полезно и для других, поэтому, возможно, стоит упомянуть другие распространенные платформы. Глупо искать этот материал повсюду.
Ответы
Ответ 1
-
Взгляните на флаги os_HOST_OS
в сочетании с опцией препроцессора C -cpp
(или с помощью {-# LANGUAGE CPP #-}
), как указано в документации GHC
-
Добавьте extensions: CPP
в описание вашего пакета, как показано в документации Cabal, и определите настраиваемый флаг следующим образом:
if os(linux)
cpp-options: -DINOTIFY
if os(darwin)
cpp-options: -DKQUEUE
Затем вы можете использовать #ifdef
в своем источнике.