File tree 1 file changed +23
-0
lines changed
1 file changed +23
-0
lines changed Original file line number Diff line number Diff line change @@ -311,3 +311,26 @@ conditionally, as you'd need to have access to the `Generic` class and
311
311
be able to define instances for it in the first place, before being
312
312
able to make use of (and thus observe) the default implementation of
313
313
` 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
+
You can’t perform that action at this time.
0 commit comments