Operating on HsSyn

MarLinn monkleyon at gmail.com
Fri Jul 28 18:34:58 UTC 2017


> by
>
>       (parser . prettyPrint . parser) = id
>
> I meant
>
> (prettyPrint . parser . prettyPrint) = id
>
> for a valid input.
>
Simplifying, (parser ∷ String → something), and (prettyPrint ∷ something 
→ String).

Therefore, (parser . prettyPrint . parser ∷ String → something) and 
(prettyPrint . parser . prettyPrint ∷ something → String).

Therefore, both criteria could only apply for (something ~ String). But 
as pretty printing adds quotation marks, not even that is true.

There are four formulations that might be applicable:

 1.

    parser . prettyPrint ≍ id

 2.

    prettyPrint . parser ≍ id -- ∷ String → String, useless here

 3.

    prettyPrint . parser . prettyPrint ≍ prettyPrint

 4.

    parser . prettyPrint . parser ≍ parser

 5. Well, you could go beyond to (prettyPrint . parser . prettyPrint.
    parser ≍prettyPrint. parser) etc…

I don't think 1 (or 2) follow from one of the last two. But 1 does imply 
them. So it is a stronger criterion than both, and therefore probably 
not the one to choose. Assuming the parser is internally consistent, 3 
just says something about the internal consistency of the pretty 
printer, while 4 says something about the relationship of the pretty 
printer to the parser. Thus 4 looks like the best candidate for a 
criterion. Possibly with 3 as a secondary target.

Cheers,
MarLinn

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20170728/290f4509/attachment.html>


More information about the ghc-devs mailing list