Различные зависимости сервера и клиента от скорости

Я строю небольшой проект ускорения, где я хочу использовать 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.

Сейчас я не могу это проверить, поэтому мне придется вернуться к этому.

Другие вопросы по тегам