Skip to content

Commit 0cf300d

Browse files
hasufellBodigrim
andauthored
Make clear .Internal convention does not adhere to the spec (#53)
* Make clear .Internal convention does not adhere to the spec * Improve "not permitted" wording Co-authored-by: ˌbodʲɪˈɡrʲim <[email protected]> * Fix spelling Co-authored-by: ˌbodʲɪˈɡrʲim <[email protected]> --------- Co-authored-by: ˌbodʲɪˈɡrʲim <[email protected]>
1 parent 9242c2d commit 0cf300d

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

pvp-faq.md

+23
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,26 @@ conditionally, as you'd need to have access to the `Generic` class and
311311
be able to define instances for it in the first place, before being
312312
able to make use of (and thus observe) the default implementation of
313313
`rnf`.
314+
315+
## Internal modules
316+
317+
There are various common practices of exempting some modules from PVP.
318+
E.g.:
319+
320+
* Mentioning in the documentation that the module is not under PVP
321+
* Naming module with prefix/infix/suffix component `Internal`
322+
* Combination of the two above
323+
324+
PVP does not endorse or recognise such practices.
325+
All exposed modules are subject to the uniform versioning policy.
326+
327+
The `Internal` modules are useful to export internals of a library, like
328+
in `Data.Text.Internal` in [text](https://hackage.haskell.org/package/text),
329+
however these are expected to follow versioning policy as any other modules
330+
(and `Data.Text.Internal` does).
331+
332+
If author desires to keep library version churn to a minimum, yet be able
333+
to change internals freely, then they are advised to create a separate
334+
package for the internal API. That approach is outlined in
335+
[Nikita Volvov's blog post "Internal convention is a mistake"](http://nikita-volkov.github.io/internal-convention-is-a-mistake/).
336+

0 commit comments

Comments
 (0)