-- Interesting: polymorphic recursion would help here.
-- We can't use (mkListTy alphaTy) in the defn of consDataCon, else mkListTy
-- gets the over-specific type (Type -> Type)

-- Wired-in type Maybe

maybeTyCon :: TyCon
maybeTyCon = pcTyCon True NonRecursive True maybeTyConName Nothing alpha_tyvar
                     [nothingDataCon, justDataCon]
maybeTyCon :: TyCon
maybeTyCon = pcTyCon True NonRecursive True maybeTyConName Nothing alpha_tyvar
                     [nothingDataCon, justDataCon]
maybeTyCon = pcTyCon True NonRecursive True maybeTyConName Nothing alpha_tyvar
                     [nothingDataCon, justDataCon]