2 ms·
Elm makes no claims to correct your logic. Logical errors are not caught by the compiler. You might still decode a JSON field to the wrong field on a Record (
by jweir 7y ago
Elm makes no claims to correct your logic. Logical errors are not caught by the compiler. You might still decode a JSON field to the wrong field on a Record (if the fields are the same type), you might invert a BOOL and use True were you meant False, you might incorrectly calculate some value, etc.
But, state errors are caught – your application can not get into an impossible state and therefore should never have any runtime errors.
Getting back to logical errors – Elm can provide some additional safeguards. For example you could have a record
``` type alias Point = { x: Int, y: Int } ```
and then decode it with
``` decode.map2 Point (field "y" int) (field "x" int) ```
Whoops you got the wrong order.
So you could make X and Y explicit types:
```
type alias Point = { x: PointX, y: PointY }
type PointX = PointX Int
type PointY = PointY Int
decode.map2 Point (field "x" decodeX) (field "y" decodeY)
```
Now your decoder won't compile unless the types line up correctly. But this adds a bit of extra overhead in unwrapping the values, but not much.