+conRepresentibleWithH98Syntax :: ConDecl Name -> Bool
+conRepresentibleWithH98Syntax
+ (ConDecl {con_qvars = tvs, con_cxt = ctxt, con_res = ResTyH98 })
+ = null tvs && null (unLoc ctxt)
+conRepresentibleWithH98Syntax
+ (ConDecl {con_qvars = tvs, con_cxt = ctxt, con_res = ResTyGADT (L _ t) })
+ = null (unLoc ctxt) && f t (map (hsTyVarName . unLoc) tvs)
+ where -- Each type variable should be used exactly once in the
+ -- result type, and the result type must just be the type
+ -- constructor applied to type variables
+ f (HsAppTy (L _ t1) (L _ (HsTyVar v2))) vs
+ = (v2 `elem` vs) && f t1 (delete v2 vs)
+ f (HsTyVar _) [] = True
+ f _ _ = False
+