withDefault : a -> Maybe a -> a
Эта функция получила 2 параметра (последний - возвращаемое значение).
Если a
является Int
, то имеем:
withDefault : Int -> Maybe Int -> Int
-- if `a` is a `Float` then we have
withDefault : Float -> Maybe Float -> Float
-- in general, if `a` is an `X` then we have
withDefault : X -> Maybe X -> X
1-й параметр - это тот, который будет возвращен, если 2-й параметр равен Nothing
.
Так что, если 2-й параметр отсутствует't Nothing
тогда функция вернет значение внутри 2-й параметр .
, поэтому базовый пример:
-- hard-code 2nd param
withDefault 10 (Just 20) -- this function call results 20
withDefault 10 Nothing -- this function call results 10
расширенные:
-- 2nd param is Nothing
withDefault 10 (String.toInt "abc") -- this function call results 10
-- 2nd param is not Nothing
withDefault 10 (String.toInt "123") -- this function call results 123
в ваш код:
Add ->
let
cur : Int
cur =
Maybe.withDefault 0 (String.toInt model.curNum)
main : Int
main =
Maybe.withDefault 0 (String.toInt model.mainNum)
in
{ model | curNum = String.fromInt (cur + main) }
Как видите, Maybe.withDefault
гарантирует, что вы всегда получите Int
для своего add returned Int
расчета.
Без него вывсегда будет получать Maybe Int
, а добавление Maybe Int
всегда будет возвращать Maybe Int
.
Примечание. Мой код выше предназначен только для Maybe.withDefault
объяснения использования, а не для производственного кода