Skip to content

Instantly share code, notes, and snippets.

module Main where
import qualified Foundation as F
import qualified Foundation.Collection as F
import qualified Foundation.String as F
import qualified Foundation.Compat.ByteString as F
import Criterion.Main
import qualified Data.Text as T
@michaelt
michaelt / Sink.hs
Created October 5, 2016 12:46
oneShot + Sink
module Main (main) where
import System.IO.Error
import GHC.Magic
data Sink = Await (Maybe Char -> Sink) | Done Int
countFrom :: Int -> Sink
countFrom n = let k = countFrom $! n + 1
-- in Await $ \mi -> case mi of
@michaelt
michaelt / pipes_oneshot.hs
Created October 7, 2016 02:43
oneShot rule for 'await >>= f'
{-#LANGUAGE BangPatterns #-}
import Pipes
import qualified Pipes.Prelude as P
import Control.Monad.Trans.State.Strict
import GHC.Magic
import qualified Pipes.Internal as I
import Data.IORef
import Control.Monad
await' :: Monad m => Proxy () a y' y m a
@michaelt
michaelt / oneShot.hs
Created October 7, 2016 02:47
sink to run with the await oneshot rule
{-#LANGUAGE BangPatterns #-}
import Pipes
import qualified Pipes.Prelude as P
import Control.Monad.Trans.State.Strict
import GHC.Magic
import qualified Pipes.Internal as I
import Data.IORef
import Control.Monad
emit :: Int -> Int -> IORef Int -> Producer Int IO ()
@michaelt
michaelt / gist:c77399da99c0a4e2ffdc728deb9bdbfc
Created October 8, 2016 00:04
little streaming library
{-#LANGUAGE BangPatterns #-}
import GHC.Magic
import Data.IORef
import Control.Monad
import Control.Monad.Trans
data Stream a m r = Yield a (Stream a m r) | Done r | Delay (() -> m (Stream a m r))
instance Functor m => Functor (Stream a m) where
fmap f (Done r) = Done (f r)
@michaelt
michaelt / streams.hs
Created October 8, 2016 00:36
little streaming library
{-#LANGUAGE BangPatterns #-}
import GHC.Magic
import Data.IORef
import Control.Monad
import Control.Monad.Trans
data Stream a m r = Yield a (Stream a m r) | Done r | Delay (() -> m (Stream a m r))
instance Functor m => Functor (Stream a m) where
fmap f (Done r) = Done (f r)
@michaelt
michaelt / IxFunctor.hs
Created October 23, 2016 05:36
little 'indexed' library
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE Trustworthy #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DefaultSignatures #-}
@michaelt
michaelt / oneshot.hs
Created October 31, 2016 22:47
oneShot rule for `await`
{-#LANGUAGE BangPatterns, MagicHash, UnboxedTuples #-}
import Pipes
import qualified Pipes.Prelude as P
import Control.Monad.Trans.State.Strict
import GHC.Magic
import qualified Pipes.Internal as I
import Data.IORef
import Control.Monad
import GHC.Types
import GHC.Prim
import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (race)
import Control.Monad
marika = forever $ do
threadDelay (10^6)
putStrLn "Marika Boo!!!"
s = do
c <- getChar
@michaelt
michaelt / freer_transformer.hs
Created February 12, 2017 23:38
some freer manipulations
{-#LANGUAGE GADTs, TypeApplications, DataKinds, TypeOperators #-}
import Control.Monad.Freer
import qualified Control.Monad.Freer as F
import Control.Monad.Trans.Writer
import Control.Monad.IO.Class
type Loc = Int
type LogSource = Int
type LogLevel = Int
type LogStr = String