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가 바깥 인스턴스에 의존해서 지금까지는 바깥 클래스의 서브클래스 안에 넣는…

    답글 1최근 활동 scala
  2. Lean4의 have 바인딩과 let 바인딩 비교

    아래 두 표현식을 보니 그리고 똑같이 동작하더군요. 정리를 증명할 때도 마찬가지예요. 서로 바꿔 써도 되나요? 차이가 뭔가요?

    답글 3최근 활동 lean-4
  3. 문자열 배열을 값으로 갖는 TypeScript Map 초기화

    각 항목이 문자열 배열을 담는 Map을 만들고 있어요. 타입 선언과 초기화를 한 문장으로 같이 하려면 어떻게 하나요? 제 (단순한) 시도는 이랬어요: 그랬더니 이렇게 나와요:

    답글 2최근 활동 typescript