Skip to content

Instantly share code, notes, and snippets.

View kazu-yamamoto's full-sized avatar
💭
QUIC and TLS 1.3

Kazu Yamamoto kazu-yamamoto

💭
QUIC and TLS 1.3
View GitHub Profile
import Data.Map (Map)
import qualified Data.Map as M
import Data.Maybe
data Trie k v = Trie (Maybe v) (Map k (Trie k v)) deriving Show
empty :: Trie k v
empty = Trie Nothing M.empty
look :: Ord k => [k] -> Trie k v -> Maybe v
@kazu-yamamoto
kazu-yamamoto / gist:3857500
Created October 9, 2012 09:01
Monoid FizzBuzz
import Data.Monoid
data FizzBuzz = N | I Int | S String
instance Monoid FizzBuzz where
mempty = N
N `mappend` N = N
N `mappend` I i = S $ show i
N `mappend` S x = S x
@kazu-yamamoto
kazu-yamamoto / gist:3346187
Created August 14, 2012 04:09
HTTP Header builder
{-# LANGUAGE BangPatterns, OverloadedStrings, FlexibleInstances, CPP #-}
module Main where
import Data.ByteString (ByteString)
import qualified Data.ByteString as S
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy as L
import Blaze.ByteString.Builder (copyByteString, Builder, toLazyByteString)
@kazu-yamamoto
kazu-yamamoto / gist:3302049
Created August 9, 2012 07:41
Demo for new thundering herd on epoll with non-blocking listening socket.
{-
Thundering herd on epoll with a non-blocking listening socket.
Compile: ghc -O ThunderingHerd.hs -threaded
Run this and do "telnet localhost 3000" to see new thundering herd.
-}
module Main where
import Control.Concurrent
import Control.Exception
@kazu-yamamoto
kazu-yamamoto / gist:3272030
Created August 6, 2012 07:48
time benchmark
import Criterion.Main
import qualified Data.ByteString.Char8 as BS
import Data.Time
import Data.Time.Clock.POSIX
import Data.UnixTime
import Network.HTTP.Date
-- import System.IO
import System.Locale
import System.Posix
fib :: Int -> Integer
fib n = fib' n 0 1
where
fib' 0 x _ = x
fib' m x y = fib' (m - 1) y (x + y)
@kazu-yamamoto
kazu-yamamoto / gist:3051375
Created July 5, 2012 04:28
QuickSort with Array
{-# LANGUAGE BangPatterns #-}
module Main where
import Control.Applicative
import Control.Monad
import Control.Monad.ST
import Criterion.Main
import Data.Array.ST
import Data.List (sort)
@kazu-yamamoto
kazu-yamamoto / gist:3022925
Created June 30, 2012 08:20
二項ヒープ(未完)
data Tree a = Node a [Tree a] deriving Show
data Digit a = Zero | One (Tree a) deriving Show
data Schedule a = Schedule [[Digit a]] deriving Show
data Heap a = Heap [Digit a] (Schedule a) deriving Show
empty :: Heap a
empty = Heap [] (Schedule [])
isEmpty :: Heap a -> Bool
isEmpty (Heap [] _) = True
@kazu-yamamoto
kazu-yamamoto / gist:2987425
Created June 25, 2012 08:45
Scheduled Merge Sort
{-# LANGUAGE BangPatterns #-}
module ScheduledMergeSort where
import Control.DeepSeq
newtype Schedule a = Schedule [[a]] deriving Show
data Segment a = Segment [a] (Schedule a) deriving Show
data MergeSort a = MergeSort Int [Segment a] deriving Show
@kazu-yamamoto
kazu-yamamoto / gist:2987415
Created June 25, 2012 08:43
Real Time Queue
{-# LANGUAGE BangPatterns #-}
module RealTimeQueue where
----------------------------------------------------------------
import Control.Applicative ((<$>))
import qualified GHC.Vacuum
import qualified GHC.Vacuum.ClosureType
import System.IO.Unsafe