-mustExposeThing :: NameSet -> TyThing -> Bool
--- We are compiling without -O, and thus trying to write as little as
--- possible into the interface file. But we must expose the details of
--- any data types and classes whose constructors, fields, methods are
--- visible to an importing module
-mustExposeThing exports (ATyCon tc)
- = any exported_data_con (tyConDataCons tc)
- -- Expose rep if any datacon or field is exported
-
- || (isNewTyCon tc && isFFITy (snd (newTyConRep tc)))
- -- Expose the rep for newtypes if the rep is an FFI type.
- -- For a very annoying reason. 'Foreign import' is meant to
- -- be able to look through newtypes transparently, but it
- -- can only do that if it can "see" the newtype representation
- where
- exported_data_con con
- = any (`elemNameSet` exports) (dataConName con : dataConFieldLabels con)
-
-mustExposeThing exports (AClass cls)
- = any exported_class_op (classSelIds cls)
- where -- Expose rep if any classs op is exported
- exported_class_op op = getName op `elemNameSet` exports
-
-mustExposeThing exports other = False
-
-
-wantDeclFor :: NameSet -- User-exported things
- -> NameSet -- Abstract things
- -> TyThing -> Bool
-wantDeclFor exports abstracts thing
- | Just parent <- nameParent_maybe name -- An implicit thing
- = parent `elemNameSet` abstracts && name `elemNameSet` exports
- | otherwise
- = True
- where
- name = getName thing
-
+-----------------------------
+writeIfaceFile :: ModLocation -> ModIface -> IO ()
+writeIfaceFile location new_iface
+ = do createDirectoryHierarchy (directoryOf hi_file_path)
+ writeBinIface hi_file_path new_iface
+ where hi_file_path = ml_hi_file location