我正在构建一个我想使用Elasticsearch的小型急速项目。但是,bloodhound似乎是在haskell中用于弹性搜索的库,间接取决于template-haskell - which isn't supported by haste。现在,我不需要从客户端调用弹性,所以我不需要急需的猎犬,但我需要能够在相同的代码库中调用它aste用于为服务器端和客户端使用相同的代码。我想我可能会有单独的客户端和服务器端实现,但我真的喜欢仓促的方式。
如何在haste中调用仅存在于服务器端的依赖项?
答案 0 :(得分:3)
Preprocessor可用于此目的。 Haste定义了__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.cabal#L63)
请注意,haste-inst
标记已在Haste的最新开发版本中重命名为haste-cabal
。
答案 1 :(得分:0)
我想到的一个潜在解决方案是导入一个"共享"具有不同实现的模块,一个client/Shared.hs
和一个server/Shared.hs
,然后使用-i
选项包含其中一个实现。所以-iclient
表示加速,-iserver
表示ghc。
此刻我无法对此进行测试,所以我不得不回复它。