Skip to content

Instantly share code, notes, and snippets.

@tanakh
tanakh / gist:3017519
Created June 29, 2012 11:47
conduit-0.5, proxy server, simplified by using async-2.0
{-# LANGUAGE OverloadedStrings #-}
import Data.Conduit
import Data.Conduit.Network
import Data.Conduit.Text (encode, decode, utf8)
import qualified Data.Conduit.List as CL
import qualified Data.Conduit.Binary as CB
import Data.Text (toUpper)
import qualified Data.ByteString.Char8 as S8
@tanakh
tanakh / gist:3023194
Created June 30, 2012 09:52
type family conflict
class RpcMethodType f where
type BaseM f :: * -> *
toRpcMethod :: f -> RpcMethod (BaseM f)
instance (Functor m, MonadIO m, OBJECT o) => RpcMethodType (m o) where
type BaseM (m o) = m
toRpcMethod m = \[] -> toObject <$> m
instance (OBJECT o, RpcMethodType r) => RpcMethodType (o -> r) where
type BaseM (o -> r) = BaseM r
@tanakh
tanakh / gist:3051852
Created July 5, 2012 06:43 — forked from kazu-yamamoto/gist:3051375
QuickSort with STUArray and Vector(s)
{-# LANGUAGE BangPatterns #-}
module Main where
import Control.Applicative
import Control.Monad
import Control.Monad.ST
import Data.Array.ST
import Data.List (sort)
import Control.Monad
import qualified Data.ByteString.Lazy.Char8 as L
import System.Environment
main :: IO ()
main = go False =<< getArgs where
go _ ("-f": rest) = go True rest
go _ [] = print . gyo =<< L.getContents
go _ ["-"] = print . gyo =<< L.getContents
go f files = forM_ files $ \file -> do
@tanakh
tanakh / file0.txt
Created September 14, 2012 06:22
threadedにすると何故か遅い ref: http://qiita.com/items/6755af56e53ce184d327
{-# LANGUAGE OverloadedStrings #-}
import Control.Applicative
import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (async, race_, wait)
import Control.Monad
import qualified Data.ByteString as S
import Data.ByteString.Char8 ()
import Data.Conduit
import Data.Conduit.Network
@tanakh
tanakh / gist:3871207
Created October 11, 2012 09:19
binary-shared test
{-# LANGUAGE DeriveDataTypeable #-}
import Data.Binary as B
import Data.Binary.Shared as S
import qualified Data.ByteString.Lazy as L
import Data.Typeable
import Data.List
import System.Random
import Control.Monad
import Control.Lens
import Control.Monad
import Control.Monad.State
import Data.List
import qualified Data.Map as M
paint :: M.Map (Int, Int) Char -> (Int, Int) -> Int
paint mm pos = evalState (go pos) mm where
go (i, j) = do
b <- use $ at (i, j)
@tanakh
tanakh / gist:3985084
Created October 31, 2012 05:44
Lens study
import Control.Category
import Prelude hiding (id, (.))
data Lens a b
= Lens
{ get :: a -> b
, set :: b -> a -> a
}
-- Initial iconv-conduit.cabal generated by cabal init. For further
-- documentation, see http://haskell.org/cabal/users-guide/
name: iconv-conduit
version: 0.1.0.0
-- synopsis:
-- description:
license: BSD3
license-file: LICENSE
author: Hideyuki Tanaka
@tanakh
tanakh / file0.txt
Created November 15, 2012 10:09
C vs Python vs Ruby vs Haskell(無意味な処理deベンチマーク) ref: http://qiita.com/items/c53751e780a89941243a
mylist :: Int -> [[Int]]
mylist n = take n $ iterate (map (+n)) [1..n]
main :: IO ()
main = print.last.last $ map reverse $ mylist 4000