Does Haddock render `MINIMAL` pragmas correctly?

Has anyone noticed that Haddock renders MINIMAL pragmas incorrectly? For example System.Random.Stateful.FrozenGen says

Minimal complete definition

(modifyGen | freezeGen, overwriteGen)

which looks like it must mean ((modifyGen | freezeGen), overwriteGen), yet the source says

{-# MINIMAL (modifyGen|(freezeGen,overwriteGen)) #-}

There don’t seem to be any open issues about this on the issue tracker. Surely I can’t be the first person to have spotted this?

1 Like

6.20.5. MINIMAL pragma

A vertical bar denotes disjunction, i.e. one of the two sides is required. A comma denotes conjunction, i.e. both sides are required. Conjunction binds stronger than disjunction.

5 Likes

Ah, thanks! That resolves it. So it’s rendering it “correctly” as in, in an equivalent form rather than literally what was specified. Using comma as a conjunction operator rather than a tuple element separator is an interesting stylistic choice.

1 Like

I think this choice is confusing and if we don’t change the syntax, Haddock should use explicit parenthesis when rendering these pragmas.

4 Likes