急速的不同服务器和客户端依赖性



我正在构建一个我想使用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

我目前无法测试它,所以我必须回到它。

最新更新