The goal of open and closed tag unions is to allow both exhaustiveness checking and composition of tags. The main motivating pieces of code are:
getSettings = \filename ->
    rawData <- Task.await (File.readUtf8 filename)
 settings <-| module Main exposing (..) | |
| import Html exposing (pre, text, Html) | |
| main : Html a | |
| main = | |
| -- List.range 0 200 | |
| -- List.range 3364 3388 | |
| -- List.range 216358 216375 | 
| module GameState | |
| exposing | |
| ( Game(..) | |
| , GameDefinition | |
| , PlayState | |
| , loading | |
| , updateGameDefinition | |
| , updatePlayState | |
| , updateScore | |
| , toReady |