私はOCamlの中に次のコンパイルメッセージつまずい:それはかなり複雑なソースコードで起こったが、ここではMNWEある二重強制はいつ便利ですか?
This simple coercion was not fully general. Consider using a double coercion.
:
open Eliom_content.Html.D
let f_link s =
let arg : Html_types.phrasing_without_interactive elt list = [pcdata "test"] in
[ Raw.a ~a:[a_href (uri_of_string (fun() -> "test.com"))] arg ]
type tfull = (string -> Html_types.flow5 elt list)
type tphrasing = (string -> Html_types.phrasing elt list)
let a : tfull = ((f_link :> tphrasing) :> tfull)
let b : tfull = (f_link :> tfull)
あなたがして、ocamlfind ocamlc -c -package eliom.server -thread test.ml
でこの例をコンパイルすることができますEliom 6がインストールされています。
最後の行でエラーが発生します。ここでは、f_link
をtfull
に変換できないというOCamlコンパイラの不満があります。
直接tfull
にf_link
を強制することはできませんなぜ誰かが私に説明しますが、半ばステップとしてtphrasing
を使用して間接的にtfull
にそれを強制する可能であることはできますか?
それの背後にある型理論へのポインタも歓迎されます。
本当に '(f_link:tphrasing:> tfull)'が期待通りに機能するので、互換性のあるタイプを検索するためのこのようなアルゴリズムについてはわかりませんでした。情報、ありがとうございます! –