learning Scalaz shows how to make an Algebraic Data Type in Haskell and scalaz:
data TrafficLight = Red | Yellow | Green deriving Eq
and
sealed trait TrafficLight
case object Red extends TrafficLight
case object Yellow extends TrafficLight
case object Green extends TrafficLight
But, as the tutorial explains, Equal.scala is invariant.
Does Haskell have variance? If so/no, does it play a role when comparing Red
to Yellow
?
Prelude> Red == Red
True
Prelude> Red == Yellow
False