1

我正在构建一个小项目,我想在其中使用 Elasticsearch。但是,在haskell中似乎要用于 elasticsearch 的库的 Bloodhound 间接依赖于template-haskell -这不受 haste 支持。现在,我不需要从客户端调用弹性,所以我不需要匆忙中的猎犬,但我需要能够从相同的代码库中调用它,因为加速构建为使用相同的代码用于服务器和客户端。我想我可以以某种方式拥有单独的客户端和服务器端实现,但我真的很喜欢这种匆忙的方式。

我如何才能匆忙调用仅存在于服务器端的依赖项?

4

2 回答 2

3

预处理器可用于此目的。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-cabal在 Haste 的最新开发版本中重命名为。

于 2015-05-12T21:04:24.983 回答
0

我考虑过的一个潜在解决方案是将一个“共享”模块导入到不同的实现中,一个client/Shared.hs和一个server/Shared.hs,然后使用该-i选项包含其中一个实现。所以-iclient对于匆忙和-iserverghc。

不过,我目前无法对此进行测试,因此我将不得不重新考虑。

于 2015-05-13T08:17:10.500 回答