Я играю с примерами Elm и заметил, что пример field дает Result
типов. После застревания я придумал этот упрощенный случай:
import Html exposing (text)
import String
f: Int -> Int
f x = x + 1
g: Result String Int -> Result String Int
g x = (Result.map f) x
main =
text ( toString ( g (String.toInt 5 ) ))
В результате отображается OK 6
, и я бы предпочел, чтобы он отображал просто 6
-- я знаю, что toString
принимает любой тип и возвращает его строковое представление. Так что, возможно, я могу изменить toString
- если результат
OK
, то я могу распечатать числовой результат - если результат
Err
, то я хотел бы сделать какое-то пользовательское сообщение об ошибке
Возможно, это причина для andThen
так как операция + 1
может завершиться неудачно.
andThen : Result e a -> (a -> Result e b) -> Result e b
andThen result callback =
case result of
Ok value -> callback value
Err msg -> Err msg
Определение andThen
— это именно то, что оно делает... и является экземпляром case
.
Либо с andThen
, либо со старым case
, как мне исправить мой пример? Даже если я исправлю это сам, это может быть не самое похожее на Elm решение с хорошей обработкой ошибок. Поэтому публикую вопрос.