【问题标题】:How do I render a heist template with splices?如何渲染带有拼接的抢劫模板?
【发布时间】:2017-01-27 22:54:07
【问题描述】:

我正在尝试使用renderWithSplices - http://hackage.haskell.org/package/snap-1.0.0.0/docs/Snap-Snaplet-Heist.html#v:renderWithSplices

获取Splices s 类型值的惯用方法是什么(对于renderWithSplices 的第二个参数)?

【问题讨论】:

    标签: haskell haskell-snap-framework heist


    【解决方案1】:

    heist tutorial 有几个定义Splices 类型的示例。

    如果你点击上面链接的黑线鳕中的Splices链接,我们看到Splices的定义如下:

    type Splices s = MapSyntax Text s
    

    如果您随后单击MapSyntax 链接,您将转到map-syntax 包的文档。这是一个小包,定义了一些更方便的语法来创建地图。上面有一个例子,但大体模式如下:

    mySplices = do
        k1 ## v1
        k2 ## v2
    

    由于前面的定义告诉我们键是文本,我们可以通过以下操作来找出值的类型需要是什么:

    someFunc = do
        ...
        renderWithSplices "my-template" mySplices
        ...
    
    mySplices = do
        "foo" ## I.textSplice "bar"
    

    如果你有足够新的 GHC(我认为是 7.8 或更高版本),最后一行的下划线将创建一个类型漏洞,并导致编译器告诉你该位置的东西应该是什么类型。然后您可以编写该类型的适当内容,并且应该更清楚从那里做什么。

    【讨论】:

    • 我非常感谢您的回答,但是经过多次尝试,我似乎对这些类型陷入了困境(我对单子变压器没有太多经验,并且一直在与 HeistT 类型作斗争)。关于mySplices - 似乎k1, v1, k2 ,v2 不能只是字符串/文本值?
    • 如果没有更多关于您尝试使用 Heist 的上下文(理想情况下是实际代码),我真的无法为您提供更好的答案。
    • 在示例中,我很难理解如何为 v1v2 获取 Splice s 的值。我试图只使用一个字符串,所以我最终认为我只需要I.textSplice 来达到这个目的,就像这样:"k1" ## I.textSplice "exampleValue"。我认为如果你有一个实际值而不是一个类型孔(对于k1v1 等),它会增加答案的清晰度
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2015-05-08
    • 2013-06-07
    • 2020-02-28
    相关资源
    最近更新 更多