    deriving (Eq)

instance Show TypeSig where
    show (Tconst   t ) = show t
    show (Tfunc [] []) = "()"
    show (Tfunc [] o ) = "( " ++ revcat o ++ ")"
    show (Tfunc i  o ) = "( " ++ revcat i ++ "-- " ++ revcat o ++ ")"