Roman Cheplyaka writes about Haskell, functional programming, Linux networking, testing and consumer-site dark patterns.
HN links his posts on golden testing, composing monads and Booking.com's manipulative tactics, and treats them as clear references on those topics.
An introduction to type-level programming should also be on the list, I think—but there are no great blog posts yet about newer type-system extensions in GHC, as far as I'm aware.
You can find some good posts on older techniques and features (phantom types, GADTs), but there's not much out there introducing type families other than material riffing on the papers that introduced them. (The papers are usually quite readable, with well chosen examples, but ...)
For example, there's almost nothing beyond the docs about the tweaks in GHC 7.6–7.8 that make doing computation at the type-level easier. Different type-system extensions can get you many of the same places (e.g., GADTs v. type families, particularly the new closed variety), and I haven't seen much advice about when to prefer one variation to another (hint: it usually helps to think about type-function injectivity/non-injectivity and definitional openness/closedness).
Richard Eisenberg's blog [0] might be the best source of insights on this stuff right now, but as a researcher he's often out closer to the bleeding edge than best suits a beginning type-level hacker.
-----
Another topic with poor coverage: Template Haskell.
----
Roman Cheplyaka's post about monad transformers [1] is one of my favorites, by the way. More code than prose, and it's not a from-the-ground-up tutorial, but if you understand the examples, you will understand transformers and why they are actually useful in real-world code.
----
0.…
>Links or it didn't happen.
To what? I'm supposed to link you to reality? How about since haskell is a general purpose, turing complete language, you demonstrate that there's some magical reason that it can only be used for "pure math problems" and nobody can be productive in it doing "real work". Why should a random nonsense claim be given the standing of fact and need to be disproved?
>friends (I know, it may be biased)
That's why I asked if it was true in your heart. Lots of people say things they think sound reasonable and believable based on other third hand information, but which are in fact made up. I have a very hard time believing you have so many friends into haskell and unable to write programs in it. Especially after teaching a bunch of PHP people who had never heard of functional programming (and half had never heard of types!) haskell in a few short lessons. Either your friends are some crazy statistical anomaly, or my developers are. Or perhaps your friends are apocryphal.
>GitHub codes I use
"I don't use anything written in haskell so you can't write anything practical in it" is a pretty poor argument.
>I encounter mostly language-oriented
Where are you encountering them? And are you sure you aren't just misinterpreting "practical" blog posts as "academic" because they mention something you don't want to hear like monads? Even most things I would assume you classify as "language-oriented" are still about solving practical…
It's a common discussion topic -- a few links:
Bad UX: How Booking.com deceives clients
https://news.ycombinator.com/item?id=15152155
https://medium.com/@ilyadoroshin/bad-ux-how-booking-com-deceives-clients-5dc9e9485f32
How Booking.com manipulates users (ro-che.info)
https://news.ycombinator.com/item?id=15297915
https://ro-che.info/articles/2017-09-17-booking-com-manipulation
[dupe] Dark Patterns (darkpatterns.org)
https://news.ycombinator.com/item?id=20858714
https://www.darkpatterns.org/
Successful machine learning models: lessons learned at Booking.com
https://news.ycombinator.com/item?id=21182445
https://blog.acolyer.org/2019/10/07/150-successful-machine-learning-models/
Dark Patterns at Scale: Findings from a Crawl of 11K Shopping Websites (2019)
https://news.ycombinator.com/item?id=25968531
https://webtransparency.cs.princeton.edu/dark-patterns/
Agreed. I remember i read that comic a while ago and i didn't get the impression that the author was trying to mock dynamic typing proponents at all. The interpretation i got from the comic was more on the lines of "as most of the people who know about type category prefer static typing, discussions on that subject tend to be very uninteresting".
And another possible interpretation is that the comic just expresses the author's preference (pun intended) of type category as a topic of discussion and thus finds the "dynamic vs static language" discussions uninteresting (because, let's face it, they are almost never about type category).
My interpretations might be completely biased though, as the first comic from CCC that i read was this one (http://ro-che.info/ccc/18.html), which could have caused a personal bias because of the good first impression :)
> Everything on our website, including how we display prices and payment policies as well as the availability and popularity of specific properties, among other features relevant to the customer booking experience, is intended to help customers
Is this a joke? The last time I looked at their site I had a dozen different types of modals saying ONE ROOM LEFT!! ALMOST OVER!!!, large-text prices with fees and taxes (30-50%+) hidden, continuous streams of alert boxes on the bottom saying "x just booked the room you were looking at! Only 3 left!"
This has been done for years[0][1][2]
[0] https://ro-che.info/articles/2017-09-17-booking-com-manipulation
[1] https://medium.com/@ilyadoroshin/bad-ux-how-booking-com-deceives-clients-5dc9e9485f32
[2] https://news.ycombinator.com/item?id=15152439
lurker14, you're shadow banned. He/she said:
That's a special case, because RWS already exists (Reader, Writer, and State all commute), and wraps IO easily.
Light overview of the issue: http://ro-che.info/articles/2012-01-02-composing-monads.html
It's the other cases that get head-desk-banging. This paper is great, but shows what a high mental tax you pay to get highly-principled programs:
http://www.grabmueller.de/martin/www/pub/Transformers.en.htm...
At the end of the day, most people on most projects seem to prefer sacrificing some formal specification (and some actual correctness) for getting code running for the common case.
Related reddit conversation:
http://reddit.com/r/haskell/comments/rd2t5/i_love_rwst_r_w_s...