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

  1. 1
    How Booking.com manipulates users
    6 people · 583 points · first shared 2017 · 304 comments on HN
  2. 2
    Understanding Asymmetric Numeral Systems
    3 people · 46 points · first shared 2017 · 7 comments on HN
  3. 3
    Composing monadic effects
    3 people · 2 points · first shared 2012 · discussion on HN
  4. 4
  5. 5
    Introduction to Golden Testing
    3 people · 1 points · first shared 2018 · discussion on HN
  6. 6
    Understanding modern Linux routing (and wg-quick)
    2 people · 183 points · first shared 2022 · 28 comments on HN
  7. 7
    Lens is unidiomatic Haskell
    2 people · 6 points · first shared 2014 · discussion on HN
  8. 8
    Cartesian Closed Comic: Equality
    2 people · 1 points · first shared 2012 · discussion on HN
  9. 9
    Ccc 17
    2 people · first shared 2014
  10. 10
    Simple FFT in Haskell
    1 people · 5 points · first shared 2015 · discussion on HN
  11. 11
    Lexical analysis with parser combinators
    1 people · 4 points · first shared 2015 · discussion on HN
  12. 12
  13. 13
    JSON validation combinators
    1 people · 3 points · first shared 2014 · discussion on HN
  14. 14
    On column positions in vim
    1 people · 2 points · first shared 2013 · discussion on HN
  15. 15

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
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…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close