我正在构建一个我想使用elasticsearch的小型急速项目。但是,似乎在Haskell中为Elasticsearch求助的图书馆的猎犬间接取决于模板 - 哈斯克尔(Template -Haskell) - 这并不是匆忙支持的。现在,我不需要从客户那里打电话给弹性,所以我不需要需要匆忙的猎犬,但是我需要能够从同一代码库中调用它,因为为服务器和客户端使用相同的代码。我想我以某种方式可以拥有单独的客户端和服务器端实现,但我真的很喜欢匆忙的方式。
我如何打电话给仅在服务器端匆忙存在的依赖项?
可以将预处理器用于此目的。急速定义__HASTE__
宏,因此应该足以将您的代码包装在条件语句中:
{-# LANGUAGE CPP #-}
main = do
#ifdef __HASTE__
print "haste!"
#endif
#ifndef __HASTE__
print "not haste!"
#endif
print "everybody"
不要忘记使用{-# LANGUAGE CPP #-}
Pragma启用C预处理器扩展。
您也可以在" .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/haste-lib.cabal#l63)
请注意,haste-inst
标志已在最新开发版本中重命名为haste-cabal
。
我想到的潜在解决方案是将"共享"模块导入不同的实现,一个client/Shared.hs
和一个server/Shared.hs
,然后使用-i
选项包括其中一个实现。因此,-iclient
急速和 -iserver
for GHC
我目前无法测试它,所以我必须回到它。