如何在ocaml中为此类型的列表定义新类型和类型?

时间:2017-08-08 21:18:46

标签: types ocaml reason

我是ocaml的新手并且定义了一个类型。

type options =
  | Rock
  | Paper
  | Scissors

我还想定义一个选项列表。这就是我尝试它的方式

type opts = list options;

当我尝试将一个文字列表传递给函数

时,Merlin给了我这个错误

Options

有什么想法吗?顺便说一句,我特意使用ReasonML,虽然我认为不重要。

这是将整个函数转换回ocaml。

let compGuess () =
  let rec aux opts k =
    match opts with
    | [] -> [Rock]
    | x::[] -> x
    | h::t -> (match k = 1 with | true  -> h | false  -> aux t (k - 1)) in
  aux [Rock; Paper; Scissors] ((Random.int 3) + 1)

1 个答案:

答案 0 :(得分:3)

您的类型问题如下所示。匹配的第一个替代方法会返回opts类型的内容。因此,第二种选择也必须返回opts类型的东西。这意味着输入的头部x属于opts类型。这意味着输入是opts列表。换句话说,您的函数应该列出选项列表。但是你传递了一系列选项。