了解Elm的Type Signature返回类型

时间:2017-03-31 18:59:28

标签: functional-programming elm

我正在努力了解榆树的类型签名。这个函数究竟返回了什么?它似乎是一个不接受任何参数并返回的函数......

route : Parser (Page -> a) a

1 个答案:

答案 0 :(得分:2)

作为我自己的学习练习,我将尝试回答这个问题。如果我出错了,其他人会介入。

我确定你习惯了像

这样的东西
type Person = Adult String | Child String Age

Child是一个带有两个参数的类型。解析器是一样的。但它的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
  }

那就是说,你看到Parser最终是一个从一个国家到一个国家名单的函数的包装器。最终它将通过一个未被访问的列表'字符串或参数;它将逐步访问'每一个和结果将合并到最终的值#。

接下来请注意,虽然Parser采用了两个类型参数 - a,但b - parseHash已定义

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

所以,你原来的

route : Parser (Page -> a) a

必须是

route : Parser (Page -> Page) Page

键入check。

因此,要返回原始问题,route是一个Parser(这是一个非常通用的对象),它封装了有关如何从一个Page转到另一个Page的说明,并且可以使用 - 通过parseHash - 告诉你接下来要去的<LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:orientation="horizontal" android:layout_weight="1"> <RelativeLayout android:id="@+id/timer1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/darker_gray"> <ProgressBar android:layout_width="200dp" android:layout_height="20dp" style="@android:style/Widget.ProgressBar.Horizontal" android:paddingLeft="16dp" android:paddingRight="16dp" android:layout_centerInParent="true"/> </RelativeLayout> <RelativeLayout android:id="@+id/timer2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@android:color/holo_blue_light"/> </LinearLayout> when using weights use the width or the height to 0dp which ever orientation u need ,这当然是你对路由器的期望。

希望这能让你开始