Skip to content

Instantly share code, notes, and snippets.

View quchen's full-sized avatar
🦉

David Luposchainsky quchen

🦉
View GitHub Profile
@quchen
quchen / Prompt.hs
Created April 2, 2014 19:25
My custom prompt printer
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import System.IO
import System.Environment
import qualified System.Exit as Exit
import Text.Printf
@quchen
quchen / Client.hs
Created May 8, 2013 08:01
Basic client/server
import Network
import System.IO
import Control.Exception
main = loop
loop :: IO a
loop = do
putStr "Enter message: " >> hFlush stdout
message <- getLine
@quchen
quchen / monad_fail.md
Last active December 17, 2015 16:59
Removing 'fail' from the Monad typeclass

Removing fail from Monad

The problem

Currently, the <- symbol is desugared as follows:

main=(s(s(k(s))(s(k(k))(s(k(s))(s(k(s(k(s))))(s(s(k(s))(s(k(k))(s(k(b))i)))(k(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(c(k))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(s(s(k(s))(s(k(k))(s(k(s))(s(k(s(k(s))))(s(s(k(s))(s(k(k))(s(k(b))i)))(k(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(s(b)(c(k))))))))))))))))))))))))))))))))
s x y z = x z (y z)
k x y = x
i = s k k
c = s (s (k (s (k s) k)) s) (k k)
b = s (k s) k
hello =
s(s(k s)(s(k k)(s(k s)(s(k(s(k s)))(s(s(k s)(s(k k)(s(k b)i)))(k(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s
b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(c k))))))))))))))))))))))))))))))))))))))))))
)))))))))))))))))))))))))))(s(s(k s)(s(k k)(s(k s)(s(k(s(k s)))(s(s(k s)(s(k k)(s(k b)i)))(k(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s b(s
@quchen
quchen / spawn-bookkeeping.hs
Last active December 27, 2015 17:29
This is a mock-up of an extended "spawn" method for Pipes.Concurrent that keeps track of metadata of the buffers. It should be fully compatible with the existing API.
-- | Store the metadata of a buffer.
data BufferMeta = BufferMeta { currentSize :: Int
, maxSize :: Maybe Int
}
-- | Like spawn', but also keeps track of metadata associated with the buffer.
spawn'' :: Buffer a
-> IO (Output a, Input a, STM (), STM BufferMeta)
@quchen
quchen / playlist
Created January 25, 2014 17:50
Playlist
electronic single tracks/adam beyer, ida engberg - lovecraft.mp3
electronic single tracks/Alberto Ruiz - Alien (Dani Sbert Remix).mp3
electronic single tracks/alex di stefano - multiverse.mp3
electronic single tracks/barnt - geffen.mp3
electronic single tracks/Bas Thomas - Second 2 None (Mike Maass Remix).mp3
electronic single tracks/black vel - assign (fabian schumann remix).mp3
electronic single tracks/boris brejcha - angel in the sky.mp3
electronic single tracks/Bunte Bummler - Youre Mine.mp3
electronic single tracks/C.P. - Metal Heart %28einsauszwei edit%29.mp3
electronic single tracks/Cari Lekebusch - Obscurus Sanctus.mp3
@quchen
quchen / amp.md
Last active May 8, 2016 18:29
Haskell 2014 "Applicative => Monad" proposal (AMP)
{-# LANGUAGE LambdaCase #-}
-- | Teaching terrible coding practices with the help of purely functional
-- programming. Today: Node.hs!
module NodeHs where
import Control.Concurrent
import Control.Exception
@quchen
quchen / gist:4634782
Last active October 30, 2016 13:53
Deriving a Read instance from a Parsec parser
import Text.Parsec hiding ((<|>), many)
import Text.Parsec.String
import Text.Printf
import Control.Applicative
data MyType = Single Int
| Tuple MyType MyType
instance Show MyType where
show (Single x) = show x