Functional programming 理解Elm';s类型签名返回类型

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

我在试着理解elm的类型签名。这个函数究竟返回什么?它似乎是一个不接受任何参数并返回

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行。谢谢