hid-examples-0.5: ch11/type-operators/Main.hs
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE NoStarIsType #-}
data a + b = Inl a | Inr b
deriving Show
data a * b = a :*: b
deriving Show
infixl 6 +
infixl 7 *
first :: a * b -> a
first (a :*: _) = a
second :: a * b -> b
second (_ :*: b) = b
val1 :: Int + Bool * Bool
val1 = Inl 0
val2 :: Int + Bool * Bool
val2 = Inr (True :*: False)
type Point a = a + a * a + a * a * a
val3 :: Point Int
val3 = Inl (Inr (0 :*: 0))
main = undefined