2016-07-24 2 views
1

Это связано с учебниками Elm (http://guide.elm-lang.org/architecture/effects/random.html), и я пытаюсь создать список случайных чисел (всего 2 элемента на данный момент) для одной из проблем.Тип конфликта при генерации случайного списка целых чисел в Elm

я получаю ошибку типа при попытке создания списка:

The 2nd argument to function `generate` is causing a mismatch. 

39|    Random.generate NewFaces intList) 
             ^^^^^^^ 
Function `generate` is expecting the 2nd argument to be: 

    Random.Generator List 

But it is: 

    Random.Generator (List Int) 

Это код, я использую:

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
    Roll -> 
     let 
     intList : Random.Generator (List Int) 
     intList = 
      Random.list 2 (Random.int 1 6) 
     in 
     (model, Random.generate NewFaces intList) 
    NewFaces newFaces -> 
     ({ model | dieFaces = newFaces}, Cmd.none) 

Я все еще пытаюсь получить мою голову обернутые вокруг типов - - особенно в отношении списков. Я предполагаю (List Int) означает список целых чисел, но я не уверен, что означает List by itself (список произвольного типа?).

Я играл с кодом, вытаскивая генератор в отдельную переменную (intList), а также явно печатая ее. Я также попытался ввести его Random.Generator List, который также вызывает ошибку. В принципе, я мог бы использовать помощь, чтобы выяснить, как согласовать List vs. (List Int).

Спасибо - супер новый для Вязов, поэтому любое руководство оценено.

ответ

2

Основываясь на сообщении об ошибке, это выглядит, как вы, вероятно, определили NewFaces как это:

type Msg 
    = Roll 
    | NewFaces List 

List принимает один параметр типа, поэтому он должен быть определен как

type Msg 
    = Roll 
    | NewFaces (List Int) 
+0

Oh ! хорошо, поэтому причина, по которой он ожидал Список, состоит в том, что я сказал, что NewFaces должен ожидать Список вместо (List Int) - это имеет смысл, спасибо! Я был так привязан к функции Random.generate и даже не думал о сообщении NewFaces. –

Смежные вопросы