HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
quchen
articles
Haskell2013–2026
quchen / articles

articles

Miscellaneous articles. The readme is the table of contents.

19Distinct people
22Mentions
0Explicit recommenders
1.3KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Miscellaneous articles. The readme is the table of contents.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 12:01:02 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year22 dated mentions

Observed mentions: 2013-08-12 08:57:42 UTC to 2026-10-05 12:56:39 UTC.

01232013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 3 mentions; 3 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 2 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC211
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC303
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC211
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC211
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC330
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC321
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC000
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC110
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC110
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC110
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC211
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Quchen's articles This repository is filled with articles I have written and needed online for various reasons. Below is a short summary of the articles available publically. The repository may contain files not mentioned below, in which case they're probably unfinished or otherwise not worth reading at this point. Haskell related General, tutorials Algebraic blindness is about how algebraic data types sometimes make Boolean Blindness even more complex. The build function explained, which is an important piece in a popular optimization technique The Cont monad explained Some lazy IO pitfalls The fix function, one possible fundamental building block of recursion Frequently Brought Up Topics in Freenode's #haskell channel Basic Haskell functions written in easily comprehensible notation. Nice for explaining e.g. sequence. What I thought was cool about Haskell some time ago. I should update this one day. Equality table of Haskell values. (live version) Created in a time where it seemed to be en vogue to create tables for the == operator in various languages. Spoiler, it's terribly boring, because it should be. How to fix, or avoid fixing, certain warnings My Haskell code style and the rationale behind it Informal description of class instances gives non-technical descriptions of various common class instances. An extensive tutorial on the Hindley-Damas-Milner type inference algorithm Lens infix operators cheat sheet provides an overview of what the individual symbols in infix operators of the lens library stand for. Löb/Möb is about an interesting, simple, complicated and quirky recursive function. Reader instance derived shows how to write the usual Reader monad instance starting from something readable and comprehensible. The second Functor law is redundant Tag, don't type is about avoiding type synonyms, and using Data.Tagged instead. How to write unmaintainable Haskell, inspired by How to write unmaintainable code Useful techniques I've found over the years and haven't seen described elsewhere Write yourself a Brainfuck in an hour implements a very simple Brainfuck interpreter in Haskell, with plenty of room to go on afterwards. Make macros mean something – readable backwards compatibility with CPP talks about how to define readable macro synonyms for writing backwards compatible libraries. zipWith const is my favorite Haskell function Proposals Applicative-Monad proposal (AMP) is the original text of the 2013 Applicative-Monad proposal, which was the starting point for Applicative becoming a superclass of Monad in GHC 7.10. Rules for typeclass laws wasn't proosed yet The MonadFail proposal is a proposal similar to the AMP, with the goal of removing fail from the Monad typeclass. Original text Update after one week of discussion.
Read the full README on GitHub

What Hacker News says

3 sources
> I wrote this code putting brevity over readability, which is something I usually never do Shouldn't the point of such a post be to show interesting code? I'm having trouble reading through the densely packed source. In addition to tromp's minor nitpick, I have several major ones. - the code is full of redundant parentheses. HLint can detect those (and many other style errors) automatically. LPaste has HLint installed so you have a linting pastebin available online. http://lpaste.net/116871 - A lot of the functions are written in a non-idiomatic way. "m >>= return . f" is "fmap", "(.)" can combine functions much more readable than Lisp stacks of parentheses. - ByteString.Char8 is usually a wrong choice, more on that here: https://github.com/quchen/articles/blob/master/fbut.md#bytes... - If you count to "length x" then often there's a mor
Read the rest
e elegant solution that avoids calculating the length altogether. For example "splits xs = zip (inits xs) (tails xs)". - Brevity is never better than readability. - No top-level definitions should lack a type signature. GHC even has warnings for that (I think they start firing with -W). - A function should do one thing and then be composed with other functions. "lowerWords" converts to words and then maps them all to lower case, for example. These are two completely different operations in one long line. - In order of increasing generality: foldr union empty = unions = mconcat = fold - Use pattern matching, avoid "(!!)". transposes w = [ a ++ [b0,b1] ++ bs | (a, b0:b1:bs) <- splits w] - also see https://github.com/quchen/articles/blob/master/fbut.md#head-... - For large amounts of words that you split and concatenate again, String is probably not the right type. Text is good for dealing with such things. - replaces w = [as ++ [c] ++ bs | (as, _:bs) <- splits w , c <- alphabet] ... and so on.
In Haskell version of Norvig's spelling corrector

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.