Restrict records using Opaque Types

This topic has been covered by Elm Patterns

If you're writing a package use a pipeline API instead.

type alias Movie = 
    { title : String
    , rating : Int

{-| adds a Rating to a Movie,
Only allows ratings between 1 and 5.
addRating : Int -> Movie -> Movie
addRating rating movie =
    { movie | rating = rating}


How can I only allow specific states for my type?


Place the type into a new File and don't expose the constructor: exposing (Movie) instead of exposing(Movie(..)). Then write your own constructors.

We can unwrap function parameters like this:

addRating rating (Movie movie) =

Further reading

Last updated