data Maybe a = Nothing | Just a data Either e a = Left e | Right a data [a] = [] | a : [a] newtype Identity a = Identity a data Proxy a = Proxy newtype Reader r a = Reader (r -> a)) newtype State s a = State (s -> (a, s)) newtype Parser a = Parser (String -> [(a,String)]) data IO a = ¯\_(ツ)_/¯