Inferring subtype of custom type

type LatLon = Lat | Lon

type Msg
    = UpdateField LatLon Float
    | ...

Is really just a nested version of:

type Msg
    = UpdateLat Float
    | UpdateLon Float
    | ...

BTW, there is a technique by which data models in Elm can be simplified by math. A custom type behaves like + (plus), and record types behave like * (multiplication).

latlon = lat + lon
msg = latlon * float + x

msg = lat * float + lon * float + x