Functional programming 理解Elm';s类型签名返回类型
我在试着理解elm的类型签名。这个函数究竟返回什么?它似乎是一个不接受任何参数并返回Functional programming 理解Elm';s类型签名返回类型,functional-programming,elm,Functional Programming,Elm,我在试着理解elm的类型签名。这个函数究竟返回什么?它似乎是一个不接受任何参数并返回 route : Parser (Page -> a) a 作为我自己的学习练习,我将尝试回答这个问题。如果我做错了什么,别人会插手的 我相信你已经习惯了这样的事情 type Person = Adult String | Child String Age Child是一种接受两个参数的类型。解析器是相同的。但这是相当可怕的 type Parser a b = Parser (State a -&g
route : Parser (Page -> a) a
作为我自己的学习练习,我将尝试回答这个问题。如果我做错了什么,别人会插手的 我相信你已经习惯了这样的事情
type Person = Adult String | Child String Age
Child是一种接受两个参数的类型。解析器是相同的。但这是相当可怕的
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
}
这就是说,您可以看到解析器最终是如何包装从状态到状态列表的函数的。最终将传递一个“未访问”字符串或参数列表;它将逐步“访问”每一个,结果将合并到最终“值”中
接下来,请注意,虽然解析器接受两个类型参数-a
,但定义了b
-parseHash
parseHash : Parser (a -> a) a -> Location -> Maybe a
那么,你的原创作品
route : Parser (Page -> a) a
必须是
route : Parser (Page -> Page) Page
进行打字检查
因此,回到您最初的问题,route
是一个解析器(这是一个非常通用的对象),它封装了关于如何从一个页面转到另一个页面的指令,并且可以通过parseHash来告诉您下一步要转到什么页面
,这当然是您对路由器的期望
希望这能让你开始你能添加一个参考来说明这是从哪里来的吗?第22行。谢谢