No, there is not. This is the same as Haskell: internal modules are just named Internal, e.g. Data.Map.Types.Internal with a warning at the top of the module so people know that the code might change at any time, with no prior changelog warning.
You can decide which bits of base/core you re-export from thing, which would make up the public API for that package. If people want to depend on the base/core package, they do it explicitly.
Is there any way to hide modules in your packages so that they can only be used internally?
No, there is not. This is the same as Haskell: internal modules are just named
Internal
, e.g.Data.Map.Types.Internal
with a warning at the top of the module so people know that the code might change at any time, with no prior changelog warning.huh, that seems like not the best design
Here's an alternative:
thing-base
orthing-core
thing
You can decide which bits of
base
/core
you re-export fromthing
, which would make up the public API for that package. If people want to depend on the base/core package, they do it explicitly.hmm, true, that would be a pain for development though.