Skip to content

Instantly share code, notes, and snippets.


Florian Klein docteurklein

View GitHub Profile
lynn / PrettyParseError.hs
Last active Oct 20, 2020
Pretty ParseErrors for Text.Parsec
View PrettyParseError.hs
module PrettyParseError (
) where
import Data.List (intercalate, nub)
import Text.Parsec
import Text.Parsec.Error
import Text.Parsec.Pos
View plot.awk
#!/usr/bin/awk -f
# This program is a copy of guff, a plot device.
# My copy here is written in awk instead of C, has no compelling benefit.
# Public domain. @thingskatedid
# Run as awk -v x=xyz ... or env variables for stuff?
# Assumptions: the data is evenly spaced along the x-axis
# TODO: moving average
reinink / query.sql
Last active Jul 27, 2020
Text search across multiple tables using MySQL
View query.sql
left join
companies on = users.company_id
where ( like 'TERM%' or
first_name like 'TERM%' or


It’s folklore that if you’re summing a list of numbers, then you should always use strict foldl. Is that really true though? foldr is useful for lists when the function we use is lazy in its second argument. For (+) :: Int -> Int -> Int this is tyically not the case, but in some sense that’s because Int is “too strict”. An alternative representation of numbers is to represent them inductively. If we do this, sumation can be lazy, and foldr can do things that foldl simply can’t!

First, let’s define natural numbers inductively, and say how to add them:

data Nat = Zero | OnePlus Nat deriving Show

one :: Nat
clementd-fretlink / Environment.hs
Created Mar 23, 2020
Env var parsing with free applicatives
View Environment.hs
#!/usr/bin/env stack
-- stack --resolver lts-14.20 --install-ghc runghc --package either --package free
{-# LANGUAGE DeriveFunctor #-}
module Main
import Control.Applicative.Free
import Data.Bifunctor (first)
import Data.Either.Combinators (maybeToRight)
import Data.Either.Validation
View event.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NumericUnderscores #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
-- |
-- To reproduce with curl, run mainTls (from ghci) and use
-- @
chrisdone / DBAPI.hs
Last active Aug 3, 2020
Defaulting fields in a record in Haskell
View DBAPI.hs
{-# LANGUAGE DataKinds #-}
-- | My database API.
module DBAPI where
import Data.Defaults
data ConnSpec p = ConnSpec
{ username :: !(Required p String)
View overhead.php
$num = floatval($argv[1] ?? '1e6');
echo "iterations: $num\n";
function noop() {
$start = microtime(true);
printf("starting raw at:\t\t%.3F s\n", $start);
View puppeteer_and_cucumber.js
const puppeteer = require('puppeteer');
const { defineSupportCode } = require('cucumber')
defineSupportCode(({ Before, Given, When, Then }) => {
Before({ timeout: 60 * 1000 }, async function testCase() {
this.browser = await puppeteer.launch()
Given('I am on google with puppeteer', { timeout: 60 * 1000 }, async function testCase() { = await this.browser.newPage()
View Postgres sharding using postgres_fdw and partitioning
-- Создаем базы данных
CREATE DATABASE "sahrding-main" OWNER = dev; -- Основная
CREATE DATABASE "sahrding-part-2016" OWNER = dev; -- Шард 1
CREATE DATABASE "sahrding-part-2017" OWNER = dev; -- Шард 2
-- Следующие запросы выполняем для каждой базы данных sahrding-part-*
-- Создаем таблицы где будут храниться реальные данные.
-- Со всеми необходимыми индексами и ограничениями.
CREATE TABLE content (
id int not null,
You can’t perform that action at this time.