Haskell

Warp を高速化した話のメモ

Mighttpd 作者の @kazu_yamamoto さんが、Warp をどうやって高速化したのかというのを Yesod ブログで書いています。 Improving the performance of Warp Sending header and body at once Caching file descriptors Composing HTTP response headers Avoidi…

cabal の使い方

cabal は dependency hell が怖いので、こんな使い方をするのが一番いいんじゃないかなーという方法です。 毎回 cabal-dev を使うのは非常に時間が掛かるし容量も取るのですが、まあ dep hell に引っかかって時間を無駄にするよりはいいんじゃないかなーと。…

EventSourceについて発表してきた

昨日、partake.inで、10分ぐらいでEventSourceの話をしてきました。発表資料は一応あるのですが、それだけだと全く意味が分からないので、当日話したことをここにまとめておきます。 EventSource とは HTTP の仕組みを使って、クライアント側でリアルタイム…

コンパイル時にファイルからテキストを読み込む

例えばテキストを埋め込むだけなら、 main = putStrLn $(LitE . StringL <$> runIO (readFile "hoge.txt")) -- hoge.txt の中身は hogefuga と書かれているとする。 とするだけで、 main = putStrLn "hogefuga" と同じ意味になってくれます。 ファイルが無か…

Data.Enumeratorとの戦いの記録

これは Haskell Advent Calendar 2011 3日目の記事です。 Data.Enumerator はいろいろすごいらしいです。 どれぐらいすごいのかは 2010-08-24 Enumerator Package – Yet Another Iteratee Tutorial | Preferred Research 使ってみよう Enumerator - あどけな…

ポイントフリースタイル入門

Haskell にはポイントフリースタイルというのがあります。 例えば foo x = f (g x) という中の x というのが「ポイント」と言うらしいです(型を明示していないから x の型が a->b だったりする可能性もあるけどその可能性は置いといて)。要するに値のこと…

モナドとモナド変換子のイメージを描いてみた

最初に言っておくと、モナドって何なの?っていう答えは一切ないです。 自分にとってモナドは「とりあえず型さえ合わせておけば何かいろいろしてくれる奴」程度としか認識できていないので、そんな説明できないです。 で、そんな自分が脳内でどういう風にイ…

Data.Aeson が便利すぎる件

JSON を扱うライブラリで一番簡単に見つかるのは Text.JSON ですが、しばらく使ってると、あまりの使いにくさに発狂しそうでした。 ということで他のを探した結果、Data.Aeson というのがかなりよさげだったので、これを使うことにしました。 しばらく使って…

昔読めなかった Haskell のコードを解読してみた

968 デフォルトの名無しさん [sage] 2011/03/02(水) 20:59:11.07 ID: Be: 先生宿題のクイックソートができました q[]=[] q(x:xs)=arr (List.partition(<x))>>>first q >>> second q>>>arr((((((((((((((app .).).(&&&))(((app .).).(&&&)) (const id)).).).).)((f</x))>…

FibBuzz を Control.Arrow で解いてみた

何か FizzBuzz 問題をちょっとだけパワーアップさせたものに FibBuzz とかいうのがあるそうで、0 から 100 までの整数を FizzBuzz する代わりにフィボナッチ数の各項に対して FizzBuzz する問題なようです。 面白そうなので久々に Control.Arrow を引っ張り…

foldr のすごさを体験してみた

Real World Haskell にはこんなコードが載ってます。 myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a x) Real World Haskell p100 4.6.8 右からの畳み込み foldl は foldr を使って書けるという…

GCJJ 予選に参加してみた

x86/64 最適化勉強会中に、iPad からリモートで家の PC に接続して、そこでやってました。 GCJJ に集中しすぎて勉強会の方を全然聞けなかったっていう・・・ほんとすみません。 ということで A と C が解けました。 B は満足度優先で探してたのですが、それだけ…

Nagios のパフォーマンスデータを Parsec で解析してみた

Nagios にはチェックデータを取得した際に、パフォーマンスデータを一緒に付け加えてくれるという機能があり、以下のページにあるツールはこのパフォーマンスデータを使って CPU 使用率やディスク空き容量をグラフ化したりといったことをしています。 PerfPa…

最近使ったモジュールとか

Data.ConfigFile 設定ファイル読み込み用のパッケージ。 こんな感じでよく使ってる。 printUsage = print "..." main = do args <- getArgs case args of [] -> pringUsage (configFile:_) -> do val <- readfile emptyCP{optionxform = id} configFile let …

JSON から BSON に変換する関数を作ってみた

Haskell には Text.JSON という JSON パッケージと、Data.Bson という BSON パッケージがあるのだけど、Text.JSON から Data.Bson へ変換する方法は探しても見つからなかったので作ってみた。 module JtoB ( J.Result(J.Ok, J.Error), jsonStringToBson, jso…

モナドを触ってみた

で、こんな風に考えることにしました。 モナドは箱 モナドは単に値をくるんでるだけであると。 a をモナド化すれば m a。 でもってこうするための関数が return。単に m を付けるだけ。 モナドから値を取り出す なぜか知らないのですが、m a -> a なる関数は…