Restrict records using Opaque Types

This topic has been covered by Elm Patterns

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

Main.elm
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}

Question

How can I only allow specific states for my type?

Answer

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