Проблема с выводом аргумента в Ocaml - PullRequest
0 голосов
/ 04 марта 2020

Ниже приведены некоторые коды Ocaml, использующие Ocaml и Yo json (поддержка библиотеки Json для Ocaml).

match feat_json with
| `Assoc [("goal",`List goal_feats_json); 
  ("tactic", `String tac_str); ("arguments",`List args_feats_json)] ::tl ->

Затем я показываю определение типа Yo json json

type json = [ `Assoc of (string * json) list
       | `Bool of bool
       | `Float of float
       | `Int of int
       | `List of json list
       | `Null
       | `String of string ]  

Оба типа goal_feats_json и args_feats_json имеют тип json. Тип бетона goal_feats_json равен [< Int of int ] list. Тип tac_str является string. Тип бетона args_feats_json составляет [> Assoc of (string * [> Int of 'b | String of 'c ]) list ] list. Но когда я скомпилировал файл, произошла следующая ошибка:

Error: This expression has type [< `Int of 'a ] list but an expression was expected of type
         [> `Assoc of (string * [> `Int of 'b | `String of 'c ]) list ] list*

Кажется, что Ocaml обрабатывает как goal_feats_json, так и args_feats_json как [< Int of int ] list. Я понятия не имею, почему произошла такая ошибка. Буду очень признателен, если кто-нибудь поможет мне.

1 Ответ

0 голосов
/ 04 марта 2020

В фрагменте кода, который вы показали, нет ошибки, поэтому невозможно понять, в чем проблема root. Тем не менее, ваша ошибка типа может быть решена с явным принуждением. Например,

let f (x:[< `Int of int]) = (x:>json)

Возможно, вы использовали goal_fets_json в качестве аргумента функции, которая в какой-то момент работает только со значениями типа [< Int of _] `, ограничивая ее тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...