Как скопировать <button> в Eliom

Я пытаюсь скопировать следующий код в Eliom, но я не могу найти лучший способ для репликации <button> тег. Документы по Eliom только запутали меня. Кажется, с использованием string_button может быть, лучший путь, но я не понимаю, что я поставляю для name аргумент.

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Button Styles</h2>
  <button type="button" class="btn btn-default">Default</button>
  <button type="button" class="btn btn-primary">Primary</button>
  <button type="button" class="btn btn-success">Success</button>
  <button type="button" class="btn btn-info">Info</button>
  <button type="button" class="btn btn-warning">Warning</button>
  <button type="button" class="btn btn-danger">Danger</button>
  <button type="button" class="btn btn-link">Link</button>      
</div>

</body>
</html>

string_button:

val string_button : 
  ?a:HTML5_types.button_attrib Eliom_pervasives.HTML5.M.attrib list ->
  name:[< string Eliom_parameters.setone ] Eliom_parameters.param_name ->
  value:string ->
  HTML5_types.button_content Eliom_pervasives.HTML5.M.elt list ->
  [> HTML5_types.button ] Eliom_pervasives.HTML5.M.elt

string_button doc: http://ocsigen.org/eliom/2.0/api/client/Eliom_output.Html5

Изменить: я думаю, что подписи типа из документации Eliom

name:[< string Eliom_parameters.setone ] Eliom_parameters.param_name

type +'a param_name

type 'a setone = [ `One of 'a | `Set of 'a ]

будет означать, что я буду использовать что-то вроде

~name:(`One "name_goes_here")

который имеет тип подписи

[> `One of string ]

что заставило бы меня поверить, что мне нужно использовать

~name:(`One "name_goes_here") param_name

получить подпись

[< string Eliom_parameters.setone ] Eliom_parameters.param_name

но это только приводит к следующей ошибке:

Error: Parse error: currified constructor

Что я делаю неправильно?

1 ответ

Тип этого параметра на первый взгляд выглядит немного запутанным, но, глядя на каждый элемент типа, он на самом деле вполне понятен:

Eliom_parameters.param_name

Из документации Eliom:

введите 'имя_парам

Абстрактный тип для имени параметров. 'a Параметр type - это фантомный тип, обычно подтип Eliom_parameters. setoneradio, используемый для обозначения арности параметра.

В данном случае фантомный тип означает, что параметр типа на самом деле не отображается в определении типа, а служит лишь способом помочь средству проверки типов различать значения дальше, чем просто их первоначальный "неокрашенный тип" (я имею в виду тип без фантомного типа параметра). Другими словами, что угодно 'a может быть, это не изменит фактическое значение, ожидаемое вашей функцией, но может ограничить, какая другая функция может затем манипулировать этим значением после его ввода.

Тем не менее, тип itelf является абстрактным типом, что означает, что мы не можем создать значение этого типа напрямую, мы должны полагаться на функции, включенные в структуру, чтобы предоставить их нам.

Если мы посмотрим, как службы создаются в eliom, мы заметим, что формы создаются с использованием заполнителей для значений такого типа и заключены в функцию, содержащую параметр для каждого из этих значений. Это позволяет нам создавать многоразовые и значимые фрагменты HTML, такие как формы со строго типизированными параметрами.

Документация подтверждает это понимание:

Eliom переопределяет большинство элементов форм (входные данные, текстовые поля, флажки и т. Д.), Чтобы можно было проверить тип формы в зависимости от типа службы.

В вашем случае элементы еще не встроены в форму, поэтому лучше всего использовать так называемые необработанные элементы. Большинство (если не все) из них расположены в тех же модулях, что и обычные виджеты форм; тот, который вы хотите использовать, называется raw_button и берет string аргументы для обоих name а также value параметры.

Другие вопросы по тегам