2017-03-31 7 views
2

Ich versuche zu verstehen, Ulmen Typ Signaturen. Was liefert diese Funktion genau? Es scheint eine Funktion zu sein, die keine Argumente akzeptiert und zurückgibt ...Verständnis Elm-Typ Unterschrift Rückgabetypen

route : Parser (Page -> a) a 
+0

Können Sie einen Verweis hinzufügen, woher das kommt? – robertjlooby

+0

Zeile 22 von [dieser Beispiel-App] (https://github.com/AdrianRibao/elm-spa-example/blob/master/main.elm). danke – Matt

Antwort

2

Als eine Lernübung für mich werde ich versuchen, dies zu beantworten. Andere werden einspringen, wenn ich etwas falsch mache.

Ich bin sicher, Sie werden verwendet, um so etwas wie

type Person = Adult String | Child String Age 

Kind ist ein Typ, der zwei Parameter übernimmt. Parser ist das Gleiche. Aber es ist definition ziemlich beeindruckend ist

type Parser a b = 
    Parser (State a -> List (State b)) 


type alias State value = 
    { visited : List String 
    , unvisited : List String 
    , params : Dict String String 
    , value : value 
    } 

Das heißt, Sie sehen, wie Parser ist letztlich ein Wrapper um eine Funktion von einem Staat zu einer Liste von Staaten. Letztendlich wird eine Liste von "nicht besuchten" Strings oder Params übergeben; es wird jedes einzelne "besuchen" und das Ergebnis wird zum endgültigen "Wert" kombiniert.

Als nächstes beachten Sie, dass während Parser zwei Parameter Typ nimmt - a, b-parseHash definiert ist

parseHash : Parser (a -> a) a -> Location -> Maybe a 

Also, Ihre ursprüngliche

route : Parser (Page -> a) a 

ist zu haben, sein

route : Parser (Page -> Page) Page 

zu überprüfen.

zu Ihrer ursprünglichen Frage zurückzukehren, also route ein Parser ist (das ist ein sehr allgemeines Ziel), die Anweisungen, wie von einem Page zum anderen gehen kapselt, und kann verwendet werden - über parseHash - zu sagen, was Page, um zum nächsten zu gehen, und das ist natürlich, was Sie von einem Router erwarten würden.

Hoffe, dass Sie damit beginnen

+1

Danke. Das hat mich in die richtige Richtung gelenkt. – Matt