2017-03-31 72 views
2

我想了解elm的類型簽名。這個函數完全返回什麼?它似乎是一個功能,不接受任何參數和返回...瞭解Elm的類型簽名返回類型

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

你可以添加一個引用來自這是從哪裏來? – robertjlooby

+0

來自[此示例應用]的第22行(​​https://github.com/AdrianRibao/elm-spa-example/blob/master/main.elm)。謝謝 – Matt

回答

2

作爲一個自己的學習練習,我會嘗試回答這個問題。如果我發現錯誤,其他人將會參與進來。

我敢肯定你是用類似

type Person = Adult String | Child String Age 

兒童是一類有兩個參數。解析器是一樣的。但它的definition是相當艱鉅的

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 
    } 

這就是說,你看語法分析器如何最終是圍繞着功能的包裝,從一國的國家名單。最終它會通過一個「未訪問的」字符串或參數列表;它將逐步「拜訪」每一個,結果將被結合到最終的「價值」中。

接下來需要注意的是,雖然解析器有兩個類型參數 - ab - parseHash定義

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

所以,你原來

route : Parser (Page -> a) a 

將不得不成爲

route : Parser (Page -> Page) Page 

鍵入檢查。

要回到你原來的問題,因此,route是封裝瞭如何從一個Page轉到另一個指令解析器(這是一個非常普遍的對象),並且可以使用 - 通過parseHash - 告訴你什麼Page去下一個,這當然是你期望從路由器。

希望這能讓你開始

+1

謝謝。這使我指出了正確的方向。 – Matt