Skip to content

Instantly share code, notes, and snippets.

@krdlab
krdlab / thin_http_parser.hs
Created January 7, 2012 04:57
practice: thin HTTP server implementation
module ThinHttpParser (
HttpRequest(..),
Method(..),
parseRequest
) where
import Control.Applicative
import Control.Monad (MonadPlus(..), ap)
import Text.ParserCombinators.Parsec hiding (many, optional, (<|>))
import Numeric (readHex)
@krdlab
krdlab / test-actor.io
Created January 26, 2012 14:08
test code of Io Language.
sender := Object clone
sender start := method(f, t, r,
for(i, f, t, r post(i); yield; wait(Random value(2)))
)
receiver := Object clone
receiver post := method(val,
val println
)
@krdlab
krdlab / countUp.hs
Created February 3, 2012 14:25
practice: STM
import Control.Concurrent
import Control.Concurrent.STM
import System.Random
countUp :: Int -> IO ()
countUp num = do
counter <- atomically $ newTVar 0
sequence_ $ replicate num $ forkIO $ worker counter
putStrLn "start..."
printWorkerOutput counter
@krdlab
krdlab / tchan.hs
Created February 3, 2012 14:41
practice: Channel
import Control.Monad (forM_)
import Control.Concurrent
import Control.Concurrent.Chan
import Control.Concurrent.STM
import System.Random
postString :: Int -> IO ()
postString num = do
ch <- atomically newTChan
forM_ [1..num] $ forkIO . worker ch
@krdlab
krdlab / def_data.hs
Created March 3, 2012 06:55
type definition by 'data' and 'newtype'
data Hoge = Hoge { get :: Int }
foo :: Hoge -> String
foo (Hoge _) = "foo!"
foo undefined
-- "*** Exception: Prelude.undefined
@krdlab
krdlab / test_aeson.hs
Created May 19, 2012 17:24
practice: Test Data.Aeson
{-# LANGUAGE OverloadedStrings #-}
import qualified System.IO.UTF8 as U
import Control.Applicative ((<$>), (<*>))
import Control.Monad (mzero)
import Data.Aeson
import Data.Aeson.Types
import Data.Text (Text)
import qualified Data.Attoparsec as AP (Result(..), parseOnly)
@krdlab
krdlab / test_time.hs
Created June 2, 2012 08:21
practice: Data.Time
import System.Locale (defaultTimeLocale)
import Data.Time
-- 時刻をフォーマット
formatISO8601 :: ZonedTime -> String
formatISO8601 t = formatTime defaultTimeLocale "%FT%T%z" t
-- 時刻を表した文字列のパース (今回は Twitter の created_at)
parseCreatedAt :: String -> Maybe UTCTime
parseCreatedAt s = parseTime defaultTimeLocale "%a %b %d %H:%M:%S %z %Y" s
@krdlab
krdlab / test_persist_mysql.hs
Created June 11, 2012 17:29
practice: Database.Persist
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE GADTs, FlexibleContexts #-}
import Database.Persist
import Database.Persist.MySQL
import Database.Persist.TH
import Control.Monad.IO.Class (liftIO)
import Data.Conduit
import qualified Data.Conduit.List as CL
@krdlab
krdlab / test_monadreader.hs
Created July 18, 2012 17:36
practice: Control.Monad.Reader
module Main where
import Control.Monad.Reader
{-
(1) local 関数の例
local :: (r -> r) -> m a -> m a
r は Reader Monad が伝搬する読み取り値の型
-}
@krdlab
krdlab / test_play_json.scala
Created July 20, 2012 11:12
Json データの変換 (on Play framework 2.0.2)
/*
↓こんな JSON データの変換 (Play framework 2.0.2)
{
"users": [
{ "name" : "krdlab", "point": 12345 },
{ "name" : "hoge", "point": 2000 },
...
]
}
*/