Some links to discussion about refinement types and enums in Elm. These are all opaque types but specific applications opaque types.