Roman Cheplyaka
ro-che.info · Personal blog · on HN since 2010
Roman Cheplyaka writes about Haskell, functional programming, Linux networking, testing and consumer-site dark patterns.
What HN saysHN links his posts on golden testing, composing monads and Booking.com's manipulative tactics, and treats them as clear references on those topics.
35HN people shared it
17linked it in comments
24stories submitted
852story points
2 years agolast shared
2010people per year2026
Most-shared posts
- 1How Booking.com manipulates users6 people · 583 points · first shared 2017 · 304 comments on HN
- 2Understanding Asymmetric Numeral Systems3 people · 46 points · first shared 2017 · 7 comments on HN
- 3Composing monadic effects3 people · 2 points · first shared 2012 · discussion on HN
- 4Why static vs dynamic typing battles are rarely interesting3 people · 2 points · first shared 2013 · discussion on HN
- 5Introduction to Golden Testing3 people · 1 points · first shared 2018 · discussion on HN
- 6Understanding modern Linux routing (and wg-quick)2 people · 183 points · first shared 2022 · 28 comments on HN
- 7Lens is unidiomatic Haskell2 people · 6 points · first shared 2014 · discussion on HN
- 8Cartesian Closed Comic: Equality2 people · 1 points · first shared 2012 · discussion on HN
- 9Ccc 172 people · first shared 2014
- 10Simple FFT in Haskell1 people · 5 points · first shared 2015 · discussion on HN
- 11Lexical analysis with parser combinators1 people · 4 points · first shared 2015 · discussion on HN
- 12Cartesian Closed Comics: Zhuangzi, butterfly and referential transparency1 people · 4 points · first shared 2010 · discussion on HN
- 13JSON validation combinators1 people · 3 points · first shared 2014 · discussion on HN
- 14On column positions in vim1 people · 2 points · first shared 2013 · discussion on HN
- 15Compile and link a Haskell package against a local C library1 people · 2 points · first shared 2021 · discussion on HN
What HN people wrote when they linked it
mynameisme · 2013-06-18
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...
pash · 2014-03-25
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.…
rgovostes · 2025-01-03
Maybe he’s just a sadist who wanted to return to implementing dark patterns to abuse his customer base into panic-booking hotels.
https://ro-che.info/articles/2017-09-17-booking-com-manipulation
lozenge · 2023-04-16
Those ratings are fake anyway. You can score it a 1 (actually the lowest option is 2.5) due to nearby noise making it impossible to sleep. But they'll also ask you to rate the cleanliness, service, and location(??) and suddenly your terrible stay is a 6.0 rating.
https://ro-che.info/articles/2017-09-17-booking-com-manipulation
tadfisher · 2021-10-26
I understand them as "golden tests": https://ro-che.info/articles/2017-12-04-golden-tests
bradrn · 2021-05-18
I’ve used these sorts of tests before, but under the name of ‘golden’ rather than ‘expect tests’. To complement the post’s OCaml example, here’s an article on how to use them in Haskell: https://ro-che.info/articles/2017-12-04-golden-tests
dylz · 2020-04-29
> 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-clien…
[2] https://news.ycombinator.com/item?id=15152439
novok · 2019-11-12
Really? Even with all of this crap? https://ro-che.info/articles/2017-09-17-booking-com-manipulation
adamnemecek · 2019-06-09
This discussion is so played out.
https://ro-che.info/ccc/17
Drup · 2017-10-27
Sure. Just like somewhere, you have to define the semantics of + on the various primitive in your lisp-based system. Oh, surprise, you do that with a typecase/runtime type check.
There are genuine arguments between static and dynamic typing. The assumed annoyance of writing type signatures is
only a valid point for specific type systems such as Java, and is certainly not a generic concern.
As usual: https://ro-che.info/ccc/17
codygman · 2014-07-18
Any good resources on extensible effects? I'm currently reading:
http://okmij.org/ftp/Haskell/extensible/index.html
I also know of:
http://jozefg.bitbucket.org/posts/2014-07-15-reading-extensible-effect…
However I was wondering if there was a "Gentle introduction to extensible effects".
Edit: I found this presentation:
http://ro-che.info/docs/2014-06-14-extensible-effects.html#1.0
boothead · 2014-07-18
Extensible effects are easier to compose in arbitrary ways. If you have a monad transformer stack you can only have each type of transformer once in each stack before you have to start using lift . lift . lift to get to the inner layers as the type class functions will only get you to the outermost instance.
They suffer from performance problems though as Roman discovered at ZuriHac this year: http://ro-che.info/articles/2014-06-14-extensible-effects-failed.html
lelf · 2014-06-19
> for example, most of the 25 top software errors don't look like type errors to me, and neither goto fail; nor Heartbleed look like type errors either,
Most of them do to me. (But I'm coming from Haskell, so it's not only the static typing, it's the very strong one).
Anyway, http://ro-che.info/ccc/17.html
dons · 2014-05-07
Lens is one guy's pathological abstraction. It's a library, and it's idiosyncratic. It isn't want large Haskell systems "look like".
Cf http://ro-che.info/articles/2014-04-24-lens-unidiomatic.html
epidemian · 2013-01-21
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 :)
imanaccount247 · 2014-12-27
>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…
DonHopkins · 2021-11-11
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-clien…
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-mo…
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/