2017-07-17 6 views
0

j'ai un morceau de code suivant Elm (fonction getProjectView est omis pour brievity):Elm ne déduisent type de valeur Rien mal

type Model = Maybe List Project 

model : Model 
model = Nothing 

getView : Model -> Html any 
getView model = 
    case model of 
    Just projects -> 
     ul [] (List.map getProjectView projects) 

    Nothing -> p [] [ text "Still loading..." ] 

Lorsque je tente de compiler l'extrait suivant, le compilateur échoue avec l'erreur suivante:

-- TYPE MISMATCH --------- E:\dev\irrelephant-code\client\elm\Views\Projects.elm 

Tag `Maybe.Just` is causing problems in this pattern match. 

32|  Just projects -> 
     ^^^^^^^^^^^^^ 
The pattern matches things of type: 

    Maybe a 

But the values it will actually be trying to match are: 

    Model 

indiquant que compilateur ne peut pas en déduire que ce Nothing est une valeur de type Model (qui à son tour est un alias de type Maybe List Project).

Qu'est-ce que je fais mal ici? Y a-t-il un moyen de marquer explicitement ce Nothing comme une valeur du type Model?

J'utilise orme v0.18.0

Répondre

7

Vous souhaitez définir comme modèle type alias de Maybe (List Product). À l'heure actuelle, avec le mot-clé type, vous définissez un nouveau type union/tag avec une valeur, Maybe, qui s'attend à des arguments, de type List et Product.

Un exemple de travail est https://ellie-app.com/3MhPcgGzXqRa1/0

+0

Il est bizarre, vous pouvez le redéfinir comme ça. –

+0

'Nothing' n'est pas un type, le type est' Maybe' – Natim

+0

Ouais, vous avez raison - j'essayais d'abord de définir la chose comme un alias de '' 'Maybe List Product''', mais il n'a pas travailler soit. Il semble que j'ai raté les parenthèses dans celui-ci, parce que '' 'Peut-être List Product''' est différent de' '' Maybe (List Product) '' ' –