splitFunTy_maybe was making a special case of implicit params by
returning Nothing on a type `noted' as an implicit param. It shouldn't
(my bad). It's mostly used downstream of the type checker, where we don't
care so much about the difference between implicit and explicit params.
The right thing to do is just see thru the NoteTy (i.e. eliminate the
special case for IPs).
Please merge.
splitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
splitTyConApp_maybe (TyConApp tc tys) = Just (tc, tys)
splitTyConApp_maybe (FunTy arg res) = Just (funTyCon, [arg,res])
-splitTyConApp_maybe (NoteTy (IPNote _) ty) = Nothing
splitTyConApp_maybe (NoteTy _ ty) = splitTyConApp_maybe ty
splitTyConApp_maybe other = Nothing