openlang

需要单态类型的客户端值

我刚开始学 Eliom,遇到了 The types of client values must be monomorphic from its usage or from its type annotation。这是我目前的例子。

  let%server new_entry_form =
  let open Html.D in
  let field = Raw.input ~a:[a_input_type `Text] () in
  let submit = Raw.button ~a:[a_class ["button"]] [txt "add"] in
  ignore
  [%client
  let open Html.D in
  let open Js_of_ocaml_lwt.Lwt_js_events in
  let field = Html.To_dom.of_input ~%field in
  (Lwt.async @@ fun() ->
  clicks (Html.To_dom.of_element ~%submit)
  (fun _ _ ->
  let entered = field##value |> Js_of_ocaml.Js.to_string in
  add_entry {id="5";name=entered;description=""};
  Lwt.return_unit):unit
  )];

  div [
  field;submit
  ]

我猜问题出在 ~%field 和 ~%submit 上。代码看起来很像教程里的例子,为什么会报错?我哪里做错了?

从英语翻译查看原文

后续讨论 2

顺着彼此的依据读下去
  1. 固定链接

    给客户端值加上类型标注就能解决。

      let _ : unit Lwt.t Eliom_client_value.t = [%client ...] in

    然后访问 value 属性,而不是调用一个不存在的方法。

      let entered = field##.value |> Js_of_ocaml.Js.to_string in

    希望能派上用场!

    从英语翻译查看原文

同一个问题的其他角度

  1. 怎样继承另一个类里面的类?

    你好, 在一个我无法修改代码的包里,类的层次结构如下。 我想给 Inner 加个方便使用的包装,但因为 Inner 依赖外层实例,目前只做到把它放进外层类的子类里面。 可惜,在多个地方继承 Outer,就意味着每个新子类里都得重复这个方便使用的 ca…

    回复 1最近活动 scala
  2. 比较 Lean4 中的 have 和 let 绑定

    我发现下面两个表达式 以及 行为完全相同。证明定理时也是这样。 它们可以互换吗?区别在哪里?

    回复 3最近活动 lean-4
  3. 初始化以字符串数组为值的 TypeScript Map

    我在创建一个 Map,其中每个条目都保存字符串数组。怎样在一条语句中同时声明类型并完成初始化? 我(天真地)这样试了一下。 结果是下面这个错误。

    回复 2最近活动 typescript