update msg model =
case model of
DisplayingRoom doorState alarmState ->
...
Failure errorMessage ->
model
先建立函数框架,如果因为故障原因无法观测到房间状态,那么更新函数只能返回原来的模型model。
当可以正常地观测房间时,如果房门处于打开状态下,受到的限制最大:门开、锁解、毒药陷阱不能起作用。
**第一步,让我们添加房门打开时的更新代码,扩展原来基础框架:**
update : Msg -> Model -> Model
update msg model=
case model of
DisplayingRoom doorState alarmState ->
case doorState of
Opened ->
case msg of
Close ->
DisplayingRoom Closed alarmState
_ -> Failure "故障,观测不到!”
Failure _ ->
model
View: Model -> Html Msg
view model =
Case model of
Failure message =
div []
p [] [ "故障,观测不到!" ] ]
DispalyingRoom doorState alarmState=
div []
[case doorState of
Opened ->
Div []
[ p [] [ "门开-> 关门!" ] ]
Closed =
Div []
[ p [] [ "门关-> 开门!" ] ]
Locked =
Div []
[ p [] [ "门锁-> 开锁!" ] ]
]
,div []
[ case alarmState of
Armed ->
Div []
[ p [] [ "毒药陷阱被触发-> 开门!" ] ]
disArmed ->
Div []
[ p [] [ "毒药陷阱没有触发-> 毒药陷阱被触发!" ] ]
Triggered ->
Div []
[ p [] [ "拔掉保险丝-> 毒药陷阱被触发/毒药陷阱没有触发!" ] ]
]