Best practices for linting wrt performance

I'd like to make aeson hlint clean. aeson contains a lot of performance optimizations which made me wonder; Which linting refactorings should you think twice about when it comes to performance? The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting? Here's the default hlint output for the current aeson master: https://gist.github.com/bergmark/5dd63c24fe6bdcf67eae0e88495a24e7 Cheers, Adam

Hi, Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about. Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/

Thanks Joachim! I actually found a note about that in the aeson sources so
I'm using
ignore "Avoid lambda"
ignore "Eta reduce"
Cheers,
Adam
On Sun, 19 Mar 2017 at 17:34 Joachim Breitner
Hi,
Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about.
Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/ _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Is that "redundant case" actually acting like seq?
On Sun, Mar 19, 2017 at 7:39 PM Adam Bergmark
Thanks Joachim! I actually found a note about that in the aeson sources so I'm using
ignore "Avoid lambda" ignore "Eta reduce"
Cheers, Adam
On Sun, 19 Mar 2017 at 17:34 Joachim Breitner
wrote: Hi,
Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about.
Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/ _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

It was part of some CPP so I guessed that was the only reason. There's no
indication that this code should act like seq
https://github.com/bos/aeson/commit/f25ac48afd3534f3b951140e448061bea83b7d28...
On Sun, 19 Mar 2017 at 21:24 Oliver Charles
Is that "redundant case" actually acting like seq?
On Sun, Mar 19, 2017 at 7:39 PM Adam Bergmark
wrote: Thanks Joachim! I actually found a note about that in the aeson sources so I'm using
ignore "Avoid lambda" ignore "Eta reduce"
Cheers, Adam
On Sun, 19 Mar 2017 at 17:34 Joachim Breitner
wrote: Hi,
Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about.
Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/ _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Hi,
no. A case in Haskell does not necessary force evaluation (in contrast to a case in Core).
Greetings,
Joachim
Am 19. März 2017 16:24:18 EDT schrieb Oliver Charles
Is that "redundant case" actually acting like seq?
On Sun, Mar 19, 2017 at 7:39 PM Adam Bergmark
wrote: Thanks Joachim! I actually found a note about that in the aeson sources so I'm using
ignore "Avoid lambda" ignore "Eta reduce"
Cheers, Adam
On Sun, 19 Mar 2017 at 17:34 Joachim Breitner
wrote: Hi,
Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about.
Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/ _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Ah, I stand corrected. Thanks!
On Sun, Mar 19, 2017 at 10:46 PM Joachim Breitner
Hi,
no. A case in Haskell does not necessary force evaluation (in contrast to a case in Core).
Greetings, Joachim
Am 19. März 2017 16:24:18 EDT schrieb Oliver Charles < ollie@ocharles.org.uk>:
Is that "redundant case" actually acting like seq?
On Sun, Mar 19, 2017 at 7:39 PM Adam Bergmark
wrote: Thanks Joachim! I actually found a note about that in the aeson sources so I'm using
ignore "Avoid lambda" ignore "Eta reduce"
Cheers, Adam
On Sun, 19 Mar 2017 at 17:34 Joachim Breitner
wrote: Hi,
Am Sonntag, den 19.03.2017, 16:19 +0000 schrieb Adam Bergmark:
The best way to find an answer to this for aeson is of course to run the benchmarks, but are there any rules-of-thumb that you take into account when linting?
eta-reduction can increase sharing but can also increase the cost of a function call, so that’s something to be careful about.
Greetings, Joachim -- Joachim Breitner mail@joachim-breitner.de http://www.joachim-breitner.de/ _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.
participants (3)
-
Adam Bergmark
-
Joachim Breitner
-
Oliver Charles