Различные зависимости сервера и клиента от скорости
Я строю небольшой проект ускорения, где я хочу использовать Elasticsearch. Тем не менее, Bloodhound, который выглядит как библиотека для поиска упругого поиска в haskell, косвенно зависит от template-haskell - который не поддерживается спешкой. Теперь мне не нужно вызывать эластичный от клиента, поэтому мне не нужен бладхаунд на скорую руку, но мне нужно иметь возможность вызывать его из той же кодовой базы, что и для ускорения, чтобы использовать тот же код для сервера и на стороне клиента. Я думаю, что у меня как-то могут быть отдельные реализации на стороне клиента и сервера, но мне действительно нравится ускоренный способ.
Как я могу иметь вызовы зависимостей, которые существуют только на стороне сервера в спешке?
2 ответа
Препроцессор может быть использован для этой цели. Ускорение определяет __HASTE__
макрос, так что должно быть достаточно, чтобы обернуть ваш код в условный оператор:
{-# LANGUAGE CPP #-}
main = do
#ifdef __HASTE__
print "haste!"
#endif
#ifndef __HASTE__
print "not haste!"
#endif
print "everybody"
Не забудьте включить расширение препроцессора C, используя {-# LANGUAGE CPP #-}
Прагма.
Вы также можете добиться аналогичного эффекта в вашем файле.cabal:
Build-Depends:
bytestring >= 0.9.2.1
if flag(haste-inst)
Build-Depends:
base == 4.6.0.1,
array == 0.4.0.1
else
Build-Depends:
base,
array,
random,
websockets >= 0.8
(источник https://github.com/valderman/haste-compiler/blob/0.4/libraries/haste-lib/haste-lib.cabal)
Обратите внимание, что haste-inst
флаг был переименован в haste-cabal
в последней версии разработки Haste.
Потенциальное решение, о котором я подумал, - это импортировать "Общий" модуль с различными реализациями, один client/Shared.hs
и один server/Shared.hs
а затем включить одну из реализаций, используя -i
вариант. Так -iclient
за поспешность и -iserver
для GHC.
Сейчас я не могу это проверить, поэтому мне придется вернуться к этому.