Skip to content

Instantly share code, notes, and snippets.


Ting-gan LUA banacorn

  • Academia Sinica
  • Taipei, Taiwan
View GitHub Profile
graninas /
Last active Jun 12, 2021
On hiring Haskellers

On hiring Haskellers

Recently I noticed the number of the same two questions being asked again and again on different Haskell resources. The questions were “How to get a Haskell job” and “Why is it so hard to find Haskellers?” Although these two are coming from the opposite sides of the hiring process, the answer is really just one. There is a single reason, a single core problem that causes difficulties of hiring and being hired in the Haskell community, and we should clearly articulate this problem if we want to increase the Haskell adoption.

We all know that there are many people wishing to get a Haskell job. And a visible increase of Haskell jobs looks like there should be a high demand for Haskellers. The Haskell community has also grown like crazy past years. But still, why is it so difficult to hire and to be hired? Why can’t companies just hire any single person who demonstrates a deep knowledge of Haskell in blog posts, in chats, on forums, and in talks? And why do Haskell companies avoid hirin



  • Red area is a result of the upfront, fixed cost of learning Haskell vs Java.
    • The company pays this for each new hire.
  • Yellow area is the developer's productivity gain once they're "over the hump."
    • The company can benefit from this, but it must first reach a break-even point vs the cost of learning.
    • If average employee tenure is less than this break-even point, the company is taking an absolute loss on each employee.
    • For Haskell to truly be worth it from a business perspective, the average tenure must not just eclipse the break-even point, but it must go further to account for the opportunity cost of better productivity during that learning period.
    • However, employees always benefit from this regardless of turnover - they get to take the productivity gain with them. This - in my opinion - naturally results in some tension.
mstksg / haskell.yml
Last active May 6, 2021
Stack Project Github Action Template
View haskell.yml
# Haskell stack project Github Actions template
# To use, mainly change the list in 'plans' and modify 'include' for
# any OS package manager deps.
# Currently not working for cabal-install >= 3
# Based on
Aerijo /
Last active Jul 14, 2021
Guide to writing your first Tree-sitter grammar

Guide to your first Tree-sitter grammar

NOTE: The Tree-sitter API and documentation has changed and improved since this guide was created. I can't guarantee this is up to date.


Tree-sitter is the new way Atom is providing language recognition features, such as syntax highlighting, code folding, autocomplete, and more. In contrast to TextMate grammars, which work by regex matching, Tree-sitter will generate an entire syntax tree. But more on that can be found in it's own docs.

Here, we look at making one from scratch.

zelinskiy / UntypedLambda.agda
Created Jun 22, 2017 — forked from gallais/UntypedLambda.agda
Interpreting the untyped lambda calculus in Agda
View UntypedLambda.agda
{-# OPTIONS --copatterns #-}
module UntypedLambda where
open import Size
open import Function
data Delay (A : Set) (i : Size) : Set where
DamnedScholar / language-sampleGrammar.cson
Last active May 29, 2021
Grammar boilerplate with annotations.
View language-sampleGrammar.cson
# TextMate tutorial:
# Regex to convert keys to unquoted: '(include|match|captures|begin|end|beginCaptures|endCaptures|name|patterns|0|1|2|3|4|5|6|7|8|9|comment|fileTypes|scopeName|repository|contentName|firstLineMatch|foldingStartMarker|foldingStopMarker)':
scopeName: 'source.<scope>' # <scope> should be a short, unique indicator for the language ("js", "php", "c", etc.)
name: '<name>' # The title that will show up in grammar selection and on your status bar.
fileTypes: [ # An array of file extensions.
danidiaz / _FP reading
Last active Jul 24, 2021
assorted reading lists
View _FP reading

A series of reading lists mostly related to functional programming.

gallais / UntypedLambda.agda
Created Sep 7, 2015
Interpreting the untyped lambda calculus in Agda
View UntypedLambda.agda
{-# OPTIONS --copatterns #-}
module UntypedLambda where
open import Size
open import Function
data Delay (A : Set) (i : Size) : Set where
staltz /
Last active Jul 25, 2021
The introduction to Reactive Programming you've been missing
kyledrake / ferengi-plan.txt
Last active Jul 12, 2021
How to throttle the FCC to dial up modem speeds on your website using Nginx
View ferengi-plan.txt
# The blog post that started it all:
# Current known FCC address ranges:
# Confirm/locate FCC IP ranges with this:
# In your nginx.conf:
location / {