:: Main a = {main :: a} :: UserLED = LED1 | LED2 | LED3 class seq v where (:.) infixr 0 :: (v t p) (v u q) -> v u Stmt | ... class assign v where (=.) infixr 2 :: (v t Upd) (v t p) -> v t Expr | type t & isExpr p class noOp v where noOp :: v t p class IF v where IF :: (v Bool p) (v t q) (v s r) -> v () Stmt | isExpr p (?) infix 1 :: (v Bool p) (v t q) -> v () Stmt | isExpr p class userLed v where ledOn :: UserLED -> (v () Stmt) ledOff :: UserLED -> (v () Stmt)