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

时间:2015-05-12 19:31:44

标签: haskell haste

我正在构建一个我想使用Elasticsearch的小型急速项目。但是,bloodhound似乎是在haskell中用于弹性搜索的库,间接取决于template-haskell - which isn't supported by haste。现在,我不需要从客户端调用弹性,所以我不需要急需的猎犬,但我需要能够在相同的代码库中调用它aste用于为服务器端和客户端使用相同的代码。我想我可能会有单独的客户端和服务器端实现,但我真的喜欢仓促的方式。

如何在haste中调用仅存在于服务器端的依赖项?

2 个答案:

答案 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。

此刻我无法对此进行测试,所以我不得不回复它。