packages feed

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