DEV Community

Discussion on: Is “Defensive Programming” actually healthy?

Collapse
 
kephas profile image
Nowhere Man

The first code is indeed brittle, in the sense that it translates three definite cases as two cases and everything else, which is semantically very different.

What you achieve manually with the fourth case is what the Elm compiler does automatically with a pattern matching on an algebraic data type:

type TrafficLight = Red | Yellow | Green
type Signal = Stop | Pause | Go

respondToTrafficLight : TrafficLight -> Signal
respondToTrafficLight light =
  case light of
    Red -> Stop
    Yellow -> Pause
    Green -> Go

With this code, you have your never case for free. If someone adds a type constructor in TrafficLight, respondToTrafficLight won't compile anymore. Elm functions must be total functions.

Collapse
 
cubiclebuddha profile image
Cubicle Buddha

Oh yea I would love to use Elm! I asked my coworkers to check it out and they almost unanimously said no. :(