2016-12-13 2 views

ответ

1

heist tutorial имеет пару примеров определения типа Splices.

Если нажать на ссылку Splices в пикши вы связаны выше, мы видим, что Splices определяется следующим образом:

type Splices s = MapSyntax Text s 

Если затем нажать на ссылку MapSyntax, вы принимаете на docs для пакета map-syntax. Это небольшой пакет, определяющий более удобный синтаксис для создания карт. Там пример в верхней части, но общая картина выглядит следующим образом:

mySplices = do 
    k1 ## v1 
    k2 ## v2 

Поскольку предыдущее определение сказал нам, что ключи текста, мы можем сделать следующее, чтобы выяснить, что тип значений должен быть:

someFunc = do 
    ... 
    renderWithSplices "my-template" mySplices 
    ... 

mySplices = do 
    "foo" ## I.textSplice "bar" 

Если у вас есть достаточно недавнее GHC (я думаю, что 7.8 или выше), то подчеркивание на этой последней строке будет создать тип отверстия и вызвать компилятор, чтобы сказать вам, что тип вещи в том, что местоположение должно быть. Тогда вы можете написать соответствующую вещь этого типа, и должно быть более очевидно, что делать дальше.

+0

Я действительно ценю ваш ответ, однако при нескольких попытках я, казалось, спустился по кроличьей норе с типами (у меня нет большого опыта работы с монадными трансформаторами и продолжал сражаться с типом HeistT). Что касается 'mySplices' - кажется, что' k1, v1, k2, v2' не могут быть просто строками/текстовыми значениями? –

+0

Я не могу дать вам лучший ответ без лишнего контекста (в идеале фактического кода) о том, как вы пытаетесь использовать Heist. – mightybyte

+0

Мне было трудно понять, как получить значение 'Splice s' для' v1' или 'v2' в примере. Я пытался просто использовать строку, поэтому в конечном итоге я понял, что мне просто нужно «I.textSplice» для этой цели: «k1» ## I.textSplice «exampleValue». Я думаю, что это добавило бы ясности в ответ, если бы у вас было фактическое значение, а не отверстие типа (для 'k1',' v1' и т. Д.) –

 Смежные вопросы

  • Нет связанных вопросов^_^