2017-03-31 53 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