我正在努力了解榆树的类型签名。这个函数究竟返回了什么?它似乎是一个不接受任何参数并返回的函数......
route : Parser (Page -> a) a
答案 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
,这当然是你对路由器的期望。
希望这能让你开始