2016-10-16 5 views
0

Я новичок в Elm. То, что я хочу сделать, это то, что я пытаюсь инициализировать модель с помощью набора вместо List, но если у elm нет никаких инициализаторов для множеств (что является позором, было бы хорошо, если бы это было # {1,2 , 3}, как в Clojure), это проблематично.Elm: initialise set in the model

С кодом (код учебник Вязов, немного модифицированный), я пытаюсь

main = 
    App.program 
    { init = init "cats" 
    , view = view 
    , update = update 
    , subscriptions = subscriptions 
    } 



-- MODEL 


type alias Model = 
    { topic : String 
    , gifUrl : String 
    , error : String 
    , history : Set String 
    } 


init : String -> (Model, Cmd Msg) 
init topic = 
    (Model topic "waiting.gif" "" Set.fromList([topic]) 
    , getRandomGif topic 
) 

Который бросает мне ошибку компилятора:

Function `Model` is expecting 4 arguments, but was given 5. 

это странно, потому что это Безразлично 't выдает ошибку в Elm repl и является допустимым кодом в большинстве случаев.

Как бы я мог достичь этого?

ответ

3

Проблема возникает из-за использования круглых скобок.

Model topic "waiting.gif" "" Set.fromList([topic]) 
-- is the same as: 
Model topic "waiting.gif" "" Set.fromList [topic] 

Вам не нужно заключать аргументы в скобках Эльм, но вы должны вложить весь четвертый параметр Set.fromList [topic] так, что компилятор знает, что это единственный параметр. Измените его на это, и все должно быть установлено:

Model topic "waiting.gif" "" (Set.fromList [topic])