definition module exist from Data.Either import :: Either :: Expr = Lit Int | Var String | (+.) infixl 6 Expr Expr | E.e: Ext e & eval e & print e class eval m :: m -> ([(String, Int)] -> Either String Int) class print m :: m -> String instance eval Expr instance print Expr