Skip to content

Instantly share code, notes, and snippets.

@michaelt
michaelt / test.hs
Last active January 11, 2016 22:36
many layered transformers vs. many "effects"
{-#LANGUAGE TypeOperators, BangPatterns, DataKinds, FlexibleContexts, GADTs #-}
module Main (main) where
import Control.Monad.Freer
import Control.Monad.Freer.Internal
import qualified Control.Monad.Freer.State as FS
import Control.Monad
import qualified Control.Monad.Trans.State.Strict as MTL
import Streaming hiding (run)
@michaelt
michaelt / Lib.hs
Created March 14, 2016 20:44
serial-bench
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE DeriveGeneric #-}
@michaelt
michaelt / inlining.hs
Created May 6, 2016 14:32
test inline/inlinable with a simple index fold
{-#LANGUAGE BangPatterns #-}
import Control.Foldl (Fold(..))
import qualified Control.Foldl as L
import qualified Data.Vector.Unboxed as V
import qualified Data.Sequence as Seq
import Control.Applicative
import Criterion.Main
import System.Environment
a >< b = fmap (,) a <*> b
{-#LANGUAGE LambdaCase #-}
module StoreStream where
import Data.Store
import Data.Store.Streaming
import Data.Store.Internal
import Pipes
import qualified Pipes.Prelude as P
import qualified Pipes.Safe as P
@michaelt
michaelt / foldIOStream.hs
Created June 1, 2016 19:23
io-streams + beautiful folding
{-# LANGUAGE OverloadedStrings, BangPatterns #-}
import System.IO.Streams hiding (mapM_, stderr)
import qualified System.IO.Streams as Streams
import qualified System.IO as IO
import Prelude hiding (writeFile, splitAt, read)
import Control.Applicative
import Control.Monad ((>=>), liftM)
import Control.Foldl (FoldM(..), Fold(..),impurely)
benchmarking fold/streaming
time 1.493 ms (1.400 ms .. 1.591 ms)
0.978 R² (0.973 R² .. 0.987 R²)
mean 1.365 ms (1.331 ms .. 1.414 ms)
std dev 131.6 μs (100.7 μs .. 169.4 μs)
variance introduced by outliers: 69% (severely inflated)
benchmarking fold/conduit
time 3.539 ms (3.431 ms .. 3.663 ms)
0.991 R² (0.985 R² .. 0.995 R²)
benchmarking fold/streaming
time 1.493 ms (1.400 ms .. 1.591 ms)
0.978 R² (0.973 R² .. 0.987 R²)
mean 1.365 ms (1.331 ms .. 1.414 ms)
std dev 131.6 μs (100.7 μs .. 169.4 μs)
variance introduced by outliers: 69% (severely inflated)
benchmarking fold/conduit
time 3.539 ms (3.431 ms .. 3.663 ms)
0.991 R² (0.985 R² .. 0.995 R²)
{-#LANGUAGE BangPatterns #-}
-- module Main (main) where
import Data.Conduit as C
import qualified Data.Conduit.Combinators as C
import Pipes as P
import qualified Pipes.Prelude as P
import qualified Streaming.Prelude as Str
@michaelt
michaelt / benchcompose.hs
Last active June 13, 2016 20:18
benchmark prelude compositions following the pattern of john weigley's https://github.com/jwiegley/streaming-tests
{-#LANGUAGE BangPatterns #-}
module Main (main) where
import Data.Conduit as C
import qualified Data.Conduit.Combinators as C
import Pipes as P
import qualified Pipes.Prelude as P
import qualified Streaming.Prelude as Str
@michaelt
michaelt / Text.hs
Created August 13, 2016 23:09
bench Foundation compared to Text
module Main where
import qualified Foundation as F
import qualified Foundation.Collection as F
import qualified Foundation.String as F
import Criterion.Main
import qualified Data.Text as T