У меня есть следующая функция
[@bs.obj]
external route:
(
~_method: string,
~path: string,
~action: list(string) => unit,
~options: Js.t({..})=?,
unit
) =>
_ =
"";
Поскольку функции могут быть частично применены, я ожидаю, что смогу сделать это:
let get = route(~_method="GET");
но это дает мне эту ошибку:
This expression's type contains type variables that can't be generalized:
(~path: string, ~action: list(string) => unit, ~options: {_.. }=?,
unit) =>
{. "_method": string, "action": list(string) => unit,
"options": Js.undefined({.. }), "path": string}
Что я здесь делаю неправильно?
Js.t
или нет, содержат неявную переменную типа, поэтомуJs.t({..})
находится в более явной формеJs.t({..} as 'a)
. И я предполагаю, что компилятор не отличает переменные типа, связанные с объектами, от любой другой переменной типа, так что с его точки зрения переменная типа вполне может быть заменена наref('a)
, что потенциально может вызвать проблемы. - person glennsl   schedule 22.03.2019