Как написать независимый от платформы код на Haskell (ghc)
В Hackage есть несколько специфичных для платформы библиотек, которые я хотел бы использовать (например, inotify, kqueue). Однако документация о том, как переключаться между платформами с помощью условной компиляции, кажется немного скудной. У меня возникли проблемы с поиском соответствующих документов...
Какие определения препроцессора я могу использовать для переключения между платформами?
Как мне настроить мой файл cabal для включения / исключения inotify/kqueue в linux/osx соответственно?
Я надеюсь, что документирование здесь может быть полезным и для других, поэтому стоит упомянуть другие распространенные платформы. Глупо искать это повсюду.
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
в вашем источнике.