Skip to content

Instantly share code, notes, and snippets.

@chrisdone
chrisdone / Data.Functor.NormalizedConstrained.hs
Last active March 20, 2020 10:04
Data.Functor.NormalizedConstrained.hs
{-# LANGUAGE RankNTypes, InstanceSigs, KindSignatures, GADTs, ConstraintKinds #-}
-- Paper: http://neilsculthorpe.com/publications/constrained-monad-problem.pdf
-- Talk: https://vimeo.com/69261960
import GHC.Exts
data NF :: (* -> Constraint) -> (* -> *) -> * -> * where
FMap :: c x => (x -> a) -> t x -> NF c t a
{-# LANGUAGE OverloadedStrings #-}
-- |
module RIO.ConcurrentLog where
import qualified Data.ByteString.Builder as SB
import Data.List
import Data.Time
import RIO
@chrisdone
chrisdone / applicative-th.hs
Created February 24, 2020 16:04
Applicative TH
applicative :: Q Exp -> [Q Exp] -> Q Exp
applicative cons [] = [| pure $(cons) |]
applicative cons (x:ys) = foldl (\inner y -> [| $(inner) <*> $(y) |]) [|$(cons) <$> $(x)|] ys
@chrisdone
chrisdone / Data.Conduit.Error.hs
Created February 16, 2020 21:02
Data.Conduit.Error
-- | Conduit piping with error handling.
module Data.Conduit.Error where
import Data.Conduit.Internal
infixr 2 .|?
(.|?) :: Monad m => ConduitT a b m (Either e ()) -> ConduitT b c m (Either e r) -> ConduitT a c m (Either e r)
ConduitT left0 .|? ConduitT right0 =
ConduitT $ \rest ->
@chrisdone
chrisdone / FlushSource.hs
Last active February 6, 2020 11:21
Flushing source conduit
{-# LANGUAGE LambdaCase #-}
-- | Sources that flush when their monadic action takes longer than n
-- microseconds.
module Data.Conduit.Flush where
import Data.Conduit
import Data.Conduit.Internal as Pipe (ConduitT(..), Pipe(..))
import UnliftIO
{-# LANGUAGE ScopedTypeVariables #-}
-- | A ResourceT-based way to use connections with conduit.
module Data.Conduit.Network.Resource where
import qualified Network.Socket as NS
import Control.Exception
import Control.Monad.IO.Class
import Control.Monad.Trans.Resource
@chrisdone
chrisdone / out.json
Created January 25, 2020 16:47
stack bios
{
"packages": [
{
"components": [
{
"modules": [
{
"path": "/home/chris/Work/fpco/stack/src/Control/Concurrent/Execute.hs",
"name": "Control.Concurrent.Execute"
},
@chrisdone
chrisdone / Lexx.hs
Last active January 14, 2020 15:22
Lexx - Show printer
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
-- | Show instance lexer and pretty-printer.
module Lexx where
import Control.Monad.State
@chrisdone
chrisdone / 0README.md
Last active December 27, 2019 14:33
Build kafka docs
<script src="templates/diffDOM.js"></script>
<script>
var before = document.createElement('div');
before.innerHTML = "<p>Hello, World!: 1</p><input type='text'>";
before.childNodes[1].value = "Hello, World!"
console.log('Output: %o', before.childNodes[1].value);
var after = document.createElement('div');
after.innerHTML = "<p>Hello, World: 2</p><input type='text'><p>Whassup?</p>";