2017-08-08 5 views
0

Je suis nouveau à ocaml et j'ai défini un type.Comment puis-je définir un nouveau type et un type pour la liste de ce type dans ocaml?

type options = 
    | Rock 
    | Paper 
    | Scissors 

Je souhaite également définir une liste d'options. Voilà comment je suis le tenter

type opts = list options; 

Merlin me donne cette erreur quand je tente de passer une liste littérale des options en fonction

Options

Toutes les idées? BTW J'utilise ReasonML spécifiquement bien que je ne pense pas que cela compte.

Voici toute la fonction traduite en 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) 

Répondre

3

Votre problème de type semble être le suivant. La première alternative de votre match renvoie quelque chose de type opts. Ainsi, la seconde alternative doit également renvoyer quelque chose de type opts. Cela implique que x, la tête de l'entrée, est de type opts. Cela implique que l'entrée est une liste d'opts. En d'autres termes, votre fonction devrait prendre une liste de liste d'options. Mais vous passez une liste d'options.

+0

Merci, ça répond tout pour moi! – ceckenrode