У меня есть собственный тип в Elm для обработки ошибок ветвления. По сути, у меня есть вход, который дает String
с, и мне нужно преобразовать его в Int
с.
type Seconds
= Error Int
| Valid Int
type alias Model =
{ timeBetweenExercises : Seconds
, roundsSequenceOne : Seconds
, roundsSequenceTwo : Seconds
, roundsSequenceThree : Seconds
, repititionsPerExercise : Seconds
, secondsPerExercise : Seconds
, totalTrainingDuration : Seconds
}
init : Model
init =
{ timeBetweenExercises = Valid 3
, roundsSequenceOne = Valid 3
, roundsSequenceTwo = Valid 3
, roundsSequenceThree = Valid 3
, repetitionsPerExercise = Valid 6
, secondsPerExercise = Valid 6
, totalTrainingDuration = Valid 6
}
Я получил идею для пользовательского типа из Эвана "Жизнь файл "talk ". Я хочу запомнить номер при возникновении ошибки (например, пользователь ввел строку вместо числа). Вот попытка моей функции обновления:
update : Msg -> Model -> Model
update msg model =
case msg of
TimeBetweenExercisesChanged newTime ->
case String.toInt newTime of
Nothing ->
{ model | timeBetweenExercises = Error model.timeBetweenExercises }
Just time ->
{ model | timeBetweenExercises = Valid time }
Моя проблема в том, что компилятор кричит на меня, потому что model.timeBetweenExercises
имеет тип Seconds
. Есть ли способ получить только значение Int
пользовательского типа?