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

Я создаю небольшой проект, в котором хочу использовать Elasticsearch. Однако bloodhound, который выглядит как библиотека для эластичного поиска в haskell, косвенно зависит от template-haskell, который не поддерживается скоростью. Теперь мне не нужно вызывать эластик из клиента, поэтому мне не нужно нужно ищейка на скорую руку, но мне нужно иметь возможность вызывать его из той же кодовой базы, что и спешка. использовать один и тот же код для серверной и клиентской части. Я думаю, что каким-то образом я мог бы иметь отдельные реализации на стороне клиента и сервера, но мне очень нравится быстрый способ.

Как я могу на скорую руку вызывать зависимости, которые существуют только на стороне сервера?


person worldsayshi    schedule 12.05.2015    source источник


Ответы (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#L63)

Обратите внимание, что флаг haste-inst был переименован в haste-cabal в последней разрабатываемой версии Haste.

person Jan Tojnar    schedule 12.05.2015

Потенциальное решение, о котором я думал, состоит в том, чтобы импортировать «Общий» модуль в разные реализации, одну client/Shared.hs и одну server/Shared.hs, а затем включить одну из реализаций, используя параметр -i. Так что -iclient за спешку и -iserver за ghc.

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

person worldsayshi    schedule 13.05.2015
comment
Это, вероятно, возможно в качестве альтернативы. В настоящее время я не могу представить сценарий, в котором он был бы предпочтительнее того, который я принял. - person worldsayshi; 17.05.2015