Есть ли способ получить тег полиморфного варианта в качестве переменной в ReasonML? - PullRequest
0 голосов
/ 26 апреля 2018

Я смотрю, смогу ли я немного обобщить следующий код.

type recordType = [
  | `Todo(todo, idFunction)
  | `TodoItem(todoItem, idFunction)


let commitItemToSchema = (normalizedSchema, recordType) => {
  switch(recordType){
  | `Todo    (todo,     idFun) => {...normalizedSchema, todo:       addOrModifyById(normalizedSchema.todo,       todo,       idFun)}
  | `TodoItem(todoItem, idFun) => {...normalizedSchema, todoItem:   addOrModifyById(normalizedSchema.todoItem,   todoItem,   idFun)}
  };
};

Есть ли способ получить \'Todo или 'TodoItem из варианта в виде переменной?

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Если бы вариант мог быть передан как переменная, в этом случае он потерял бы проверку типа. Я не думаю, что ReasonML поддерживает это.

0 голосов
/ 10 мая 2018

Было бы полезно, если бы вы показали нам полный набор типов. OCaml / BuckleScript / ReasonML поддерживают полиморфные типы. Вот простое объявление типа и значения с использованием полиморфного типа в ReasonML.

type wrapper('a) = {
  item: 'a,
  details: string
};

let x = {item: 1, details: "This is an int"};

Вот два вида функций, которые принимают wrapper с неограниченным типом 'a и wrapper с ограниченным типом 'a как int.

let unrestrictedType = (x: wrapper('a)) => {
  Js.log(x);
};

let restrictedType = (x: wrapper(int)) => {
  Js.log(x);
};
...