Re: Haskellの勉強で詰まってる部分

Haskellの勉強で詰まってる部分 - mizchi's blogmizchi.hatenablog.com Haskellを習得する上で難しいポイントだと思います。大きく分けると次の二つにまとめられるのではないかと思います。 コードの中で現れる識別子からそれが何なのかを探しづらい Cabalが…

debパッケージをデバッグシンボル付きでリビルドする

HaskellのFFI呼び出しで返ってくる値がおかしいのでgdbでデバッグしたいという時、*-dbgパッケージがあればいいのだけどない場合は自分でパッケージをリビルドする必要がある。 sudo apt-get build-dep foo mkdir foo cd foo DEB_BUILD_OPTIONS="nostrip noo…

GHCのヒーププロファイルの結果を適当に間引く

GHCのヒーププロファイラが出力する.hpファイルは、計測対象のプログラムが動いている間ずっと追記されるので、長時間動かしているとファイルがとても大きくなって、hp2any-managerなどで開けなくなってしまう。 そういう場合は.hpファイルの中身を適当に間…

Mac OS XにThreadScopeをインストールする(2015年1月版)

HomebrewのGTK+がQuartzバックエンドに対応したので、XのいらないThreadScopeが使えるようになった。手元の * GHC 7.8.4 * OS X Yosemite な環境では次のコマンドでインストールできた。 brew install gtk+ --without-x11 brew install gcc-4.9 cabal update…

新しいlifted-asyncの使い方

monad-controlが新しくなって、モナド変換子スタックの各層がもつ状態を表すStTやStMがassociated data typesからassociated type synonymsに変わった。この変更でmonad-controlに依存するたくさんのパッケージが壊れ、拙作lifted-asyncも漏れなく壊れた。修…

Cabal sandboxで実行ファイルをインストールする

c2hsとかthreadscopeなど、ライブラリではなく実行ファイル + αを含むパッケージをcabal hellに陥ることなくホームディレクトリの.cabalにインストールするには--bindirと--datadirを指定してsandboxにインストールすればよい。 cabal get threadscope cd th…

Debug.Traceで関数の引数を表示するイディオム

Haskellでよくある複数行の関数定義だったり、ガードを使っている場合、全ての場合について引数をtraceするコードが書きにくいことがある。例えば、 data A = A1 | ... data B = B1 | ... data C = C1 | ... f :: A -> B -> C -> ... f A1 b c = ... f a B1 …

HackageでHaddockが生成されない時は

ここのところずっとHackageでHaddockの生成ボットが止まっているようで、新しくアップロードされたパッケージはたいていドキュメントが無い。どうも新しいサーバにHackageサーバを移しているようなのだけど、きっと忙しいんだろう。自分で管理しているパッケ…

あるパッケージのバージョンによって別のパッケージへの依存関係を変更する

具体的にはaesonのバージョンが新しい場合にのみscientificを依存関係に組み込みたいとする。 library build-depends: (aeson >= 0.3.2.5 && < 0.7.0) || (aeson >= 0.7.0 && scientific) こんな感じにできないかなぁと思っていたが、これはparse errorにな…

hpc-coverallsでHaskellプロジェクトのテストカバレッジを可視化する

GHCには昔からHaskell Program Coverage (HPC)というカバレッジを計測する機能とツールがついてくるのだけど、コマンドラインオプションの指定が面倒だったり、そもそもHPCにバグがあって使いづらいためか、あまり広くは使われてこなかった。ところが最近に…

HaskellからInfluxDBを使う

Haskellからお手軽に時系列データベースにアクセスする必要が出てきたので、今巷で人気が出始めたInfluxDBのHaskellクライアントライブラリを書いた。 Hackage: influxdb: Haskell client library for InfluxDB maoe/influxdb-haskell · GitHub ドキュメント…

Pattern synonymsの使い道

もうすぐ出る出ると言われ続けて久しいGHC 7.8は、大きめの新機能がいくつも入る。そのうちの一つがpattern synonymsという言語拡張で、これまで第一級市民でなかったパターンを、再利用可能な部品として扱えるようにする仕組み。チケットが登録されてから3…

Re: Real World Haskellの古いところ

Real World Haskell の古いところ - あどけない話の25章と23章についてのコメントをまとめました。 > id:kazu-yamamotoさんprofilingのところはコンパイルオプションがghc 6系の古いものなので http://t.co/tVoGa7aFzv を見た方が良さそう— Mitsutoshi Aoe/m…

GitHubと連携するチャットサービスGitterが便利そう

普段使っていないメールボックスを覗いてみたら、Gitterからベータテストの招待状が届いていたので使ってみた。使い方は簡単で、GitHubのOAuthでログインして自分のプロジェクト名をクリックするだけ。これでもうチャットルームが作られて、使えるようになる…

モナディックなループ

しょーもないイディオムの話。モナディックなループを書くとき、だいたい3つくらい宗派があるように思う。 {-# LANGUAGE ViewPatterns #-} module Loop where import Control.Monad (when) import Data.Function (fix) import System.Environment (getArgs) …

詳解bytestring

というタイトルでbytestringパッケージの包括的ガイドを書こうと思ったけど、まさにそんな内容のスライドをbytestringのBuilderを書いた人が公開していたのを見つけてしまったので、是非そちらを見て欲しい。A guided tour through the bytestring library以…

GREEのCUFPでのHaskell事例紹介を見た

社内Haskellチュートリアルのススメ | GREE Engineers' Blogという記事からたどって、GREEの中の人がCUFPでHaskellの事例紹介をした動画を見た。CUFP 2013: Yasuaki Takebe: A Mobile Gaming Platform Case StudyスライドはCommon Pitfalls of Functional Pr…

Sensuについて

最近Sensuというモニタリングフレームワークを試している。見ての通り公式はオサレで今時な感じで、Nagiosのような古くささやZabbixのようなエンタープライズ臭はない。Sensuの特徴は何かと考えると、こんな感じのことが浮かぶ。 監視とメトリクス収集を一つ…

persistentでEntityのJSONフォーマットを変更するには

Yesod界隈でよく使われているpersistentは、v1.2.0になったタイミングで、Entity a全体に対するToJSONとFromJSONクラスのインスタンスを提供するようになった。このインスタンスのJSONフォーマットがちょっと変わっていて、 {"key": 1, "value": {"name": "T…

HaskellでWebAppの開発に必要なN個のこと

あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずHaskellについて知っていることを書いた。 ← ここまで引用。 パ…

2013年8月現在のHaskell開発環境

以前はHaskell Platformを使っていたのだけど、Cabalの依存関係ソルバがあまり賢くなかったこともあり、いわゆるdependency hellに陥ることが多かった。それからというものHaskell Platformを使わない環境を使っている。OS Xでは公式のインストーラやらHomeb…

Haskellでの並列・並行プログラミングの今: Parallel and Concurrent Programming in Haskell

HaskellコンパイラGHCの作者の一人であり並列RTSを書いた人であるSimon Marlowが、Haskellでの並列・並行プログラミングの今を切り取った本を出した。Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programm…

Goodbye Plain Old Chef Repository

pfcasualで仕入れたネタをもとに、Chef環境を刷新したので、忘れないうちにメモしておく。そもそもの問題意識は、 現状のcookbookにテストが全くないこと テストの欠落が原因でcookbookの変更に対して億劫になってしまっていること Chefの理解・テストの欠落…

はてなブログのHaskellグループ作りました

はてなブログにグループ機能が付いたそうなので、早速Haskellグループを作りました。Haskell関連の記事を書いている人は是非参加してみてください。Haskell

Chefのあれこれ #pfcasual

昨日Provisioning Frameworks Casual Talks vol.1というイベントに参加した。イベントの内容はスライドも上がってるだろうし割愛して、今の状況や思うことなどを書いてみよう。前提として、現職での管理対象のサーバは少なくて仮想サーバを含めてせいぜい40…

FRPの話

Haskell Advent Calender 2012で久々にブログを書くということで、ついでにはてなダイアリーからはてなブログに移行してみた。記事やコメントはもちろんのこと、はてブも移行でき、なおかつundoもできるという素晴らしい仕様なので、安心して移行することが…

HaskellでCIするなら

函数プログラミングの集いのランチで聞かれたのでHaskellのテスト環境についてまとめます。 githubに置いているコードを面倒な設定なしにテストしたい → cabal test + travis-ciがおすすめ クローズドなコードなんだけど、どうしよう → jenkinsでもセットア…

SICPのデジタル回路のシミュレータをFRPで書いた

最近FRPなコードを書いているので、ふとid:kazu-yamamotoさんに言われたのを思い出して書いてみました。元の問題はこちらからどうぞ。今回はelereaというライブラリを使っています。FRPとはなんぞやな方はやさしいFunctional reactive programming(概要編)…

undefinedの代わりに$notImplementedを使おう

Haskellで一からコードを書くとき、よく型だけ書いて実装はundefinedにすることがあります。これはとても便利な常套手段なんですが、規模が大きくなってきたり、undefinedな数が多くなってくると不便に思うこともあります。 undefinedとplaceholders 一通り…

htmlcatをSnap対応させました

htmlcatをwai + warpだけでなくsnap-core + snap-serverでも動くようにしてみました。なるべく似たようなコードになるように書いてみました。とても似ています。Snapだとこんな感じ。 {-# LANGUAGE OverloadedStrings #-} module HtmlCat.Snap (feedStdIn, r…