タグ

ブックマーク / maoe.hatenadiary.jp (12)

  • Cabal sandboxで実行ファイルをインストールする - maoeのブログ

    c2hsとかthreadscopeなど、ライブラリではなく実行ファイル + αを含むパッケージをcabal hellに陥ることなくホームディレクトリの.cabalにインストールするには--bindirと--datadirを指定してsandboxにインストールすればよい。 cabal get threadscope cd threadscope-0.2.6 cabal sandbox init cabal install --bindir ~/.cabal/bin --datadir ~/.cabal/share最後のコマンドは呪文みたいなものなのでシェルの履歴に入れておこう。 こうすればsandboxにインストールしているのでユーザのパッケージDBを壊すこともないし、実行ファイルとそれに必要なデータファイルは~/.cabalにインストールされるので、ソースディレクトリを削除しても問題無い。

    Cabal sandboxで実行ファイルをインストールする - maoeのブログ
    ruicc
    ruicc 2014/12/25
    --bindirと--datadir
  • hpc-coverallsでHaskellプロジェクトのテストカバレッジを可視化する - maoeのブログ

    GHCには昔からHaskell Program Coverage (HPC)というカバレッジを計測する機能とツールがついてくるのだけど、コマンドラインオプションの指定が面倒だったり、そもそもHPCにバグがあって使いづらいためか、あまり広くは使われてこなかった。 ところが最近になって状況を一変させるかもしれない、hpc-coverallsというパッケージがHackageに上がっていることに気がついたので使ってみた。 Coveralls自体は広く使われてるので解説はいらないと思う。GitHubでみたいなバッジをよく見かけるはず。 hpc-coverallsの使い方は簡単で、Hackageのドキュメントにあるとおり before_installでcabal install hpc-coveralls cabal configureする時に、--enable-library-coverageをつけ

  • 詳解bytestring - maoeのブログ

    というタイトルでbytestringパッケージの包括的ガイドを書こうと思ったけど、まさにそんな内容のスライドをbytestringのBuilderを書いた人が公開していたのを見つけてしまったので、是非そちらを見て欲しい。 A guided tour through the bytestring library 以上、Haskell Advent Calender 2013 22日目の記事でした。 と、これで終わらせてしまってはさすがに良くないので、今回は上のスライドが作られた時点から加えられた主な変更を二つ紹介する。これらの変更は最新のリリース版GHCにバンドルされているbytestringパッケージにはまだ含まれていないので、利用したい場合は適宜cabalファイルにバージョン指定する必要がある。 ShortByteString ShortByteStringはByteStringから使え

    詳解bytestring - maoeのブログ
    ruicc
    ruicc 2013/12/25
    「通常のstrictなByteStringは9ワード分余計に消費する」
  • GREEのCUFPでのHaskell事例紹介を見た - maoeのブログ

    社内Haskellチュートリアルのススメ | GREE Engineers' Blogという記事からたどって、GREEの中の人がCUFPでHaskellの事例紹介をした動画を見た。 CUFP 2013: Yasuaki Takebe: A Mobile Gaming Platform Case Study スライドはCommon Pitfalls of Functional Programming and How to Avoid Them: A Mobile Gaming Platform Case Study (PDF)。 GREEでは 内製のKVSデータベースの管理 画像サーバのフロントエンド みたいな用途でHaskellを使っているらしい。 プレゼンは(タイトルではFunctional Programmingとあるけど、実際のところは)Haskellでよくある落とし穴を紹介して、そ

    GREEのCUFPでのHaskell事例紹介を見た - maoeのブログ
    ruicc
    ruicc 2013/12/13
    並列並行本を読もうと
  • HaskellでWebAppの開発に必要なN個のこと - maoeのブログ

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずHaskellについて知っていることを書いた。 ← ここまで引用。 パッケージマネージャ Cabal 1.18を使おう。以上。 アプリケーションサーバ WSGIとかRackとかの流れでHaskellでもwebアプリのサーバインタフェースを統一化する動きがいくつかあった。その中で一番市民権を得たのはwaiと呼ばれるものだ。 ただ、残念なことにHaskell界でここ数年ずっと続いているI/Oストリーミングライブラリ戦争の決着がついていないため、統一化の状況は思わしくない。waiはconduitというライブラリに依存しているが、フレームワークによっては別のI/Oストリーミングライブラリを基盤にしている。 現状の3

    HaskellでWebAppの開発に必要なN個のこと - maoeのブログ
  • 2013年8月現在のHaskell開発環境 - maoeのブログ

    以前はHaskell Platformを使っていたのだけど、Cabalの依存関係ソルバがあまり賢くなかったこともあり、いわゆるdependency hellに陥ることが多かった。それからというものHaskell Platformを使わない環境を使っている。OS Xでは公式のインストーラやらHomebrewやMac Portsなど幾つかの方法が用意されているが、こんな方法もあるよということで紹介してみよう。 GHCのインストール GHCのリリース版は自分でビルドしない。時間が掛かるから。インストーラは使わずにtarball版を使う。これはインストール先を自分で指定したいため。 tar zxvf ~/Downloads/ghc-7.6.3-x86_64-apple-darwin.tar.bz2 cd ghc-7.6.3/ ./configure --prefix=/usr/local/ghc/

    2013年8月現在のHaskell開発環境 - maoeのブログ
  • undefinedの代わりに$notImplementedを使おう - maoeのブログ

    Haskellで一からコードを書くとき、よく型だけ書いて実装はundefinedにすることがあります。これはとても便利な常套手段なんですが、規模が大きくなってきたり、undefinedな数が多くなってくると不便に思うこともあります。 undefinedとplaceholders 一通り関数とその型の概要ができてきて、小さく動かせる範囲で実装していきましょうという段階に入ると、動かしながら実装したくなるものです。 このとき未実装の部分をundefinedにしておくと、実行時には例外が上がります。残念なことにこの例外はどこから上がったものなのかエラーメッセージを見てもわかりません。 例えばこんな感じ… Foo: Prelude.undefinedこれじゃつらいので行番号を出せるようにします!というのがplaceholdersライブラリです。 使い方は簡単で、 f :: MonadFooBar

    undefinedの代わりに$notImplementedを使おう - maoeのブログ
  • やさしいFunctional reactive programming(概要編) - maoeのブログ

    あと、やはりネットワーク周りなどI/Oの多いプログラムの書きにくさが課題になっている印象。関数的なI/OはFRPで解決できそうな気がするんだけど調べてない。そろそろFRPをちゃんと理解したいなー。 Parsec 3活用事例: Keepalived構文チェッカ - maoeのブログ なんて書いてから早1ヶ月半、ようやくFRPが掴めてきたのでわかったことをまとめてみます。 Reactive programmingって何? FRPの前に、一般的にwikipedia:en:Reactive programmingと呼ばれるパラダイムについて触れておきます。reactive programmingとは疑似言語を使ってかなーり大雑把に説明すると、 var a = 1 var b = a + 1 a = 10 // aを書き換える print b // => 11print bの出力は2ではなく11です

    やさしいFunctional reactive programming(概要編) - maoeのブログ
    ruicc
    ruicc 2011/10/27
  • Scoped type variablesが必要になるとき - maoeのブログ

    whereの中の局所定義に型シグネチャを付けると Couldn't match type `a' with `a1' ...といわれて型検査を通らない!という経験はありませんか?これを直すには字句的スコープを持つ型変数が必要です。この機能はScopedTypeVariablesという言語拡張によって有効になります。 局所定義された式に型シグネチャを付けられない たとえばこんな単純な例を考えましょう。 rev :: [a] -> [a] rev xs = ys where ys = reverse xs 関数revは単にreverseの別名です。reverse xsの結果をwhereでysに束縛し、それを返しているだけです。このysの型はもちろん[a]な訳ですが、どういうわけか型シグネチャを書くと型検査で弾かれます。 rev :: [a] -> [a] rev xs = ys where y

    Scoped type variablesが必要になるとき - maoeのブログ
    ruicc
    ruicc 2011/08/26
    Haskellの型シグネチャは暗黙に量化される
  • TKYProfが少しかっこよくなったので、まじめに紹介します - maoeのブログ

    先日プレアルファ版としてリリースしたTKYProfを少しかっこよくしました。今日はまじめにTKYProfの紹介を書きます。 TKYProfって何? Haskell処理系であるGHCのプロファイリング機能で出力されるテキストファイルを見やすくするためのツールです。 具体的には次のような特徴を持っています。 webベースでブラウザから閲覧する JavaScriptによる綺麗でインタラクティブなグラフ cabal install tkyprofのみの簡単インストール TKYProfという名前は、PerlのプロファイラであるDevel::KYTProfがあるなら次はTKYかな、くらいのもので深い意味はありません。 動作環境・お断り 互換性とかほとんど考慮していないので、いわゆるモダンブラウザでしか動かないと思います。 HTML 5のHistroy APIのpushState popstateとか。

    TKYProfが少しかっこよくなったので、まじめに紹介します - maoeのブログ
  • Haskell忘年会 - maoeのブログ

    火曜日にHaskell 2009年末の集いに参加してきました。 前哨戦で参加者全員が発表するということで、新しいGHCで改善された並列プログラム用ランタイムシステムの性能改善の話を少しだけしました。スライドはこちら。 GHC 6.12.1 マルチコア対応ランタイムシステムについてView more documents from ma0e. 新しいGHCでは、 Control.Parallel.parで生成される超軽量スレッドsparkを各コア間で共有するのにwork stealing queueというロックフリーなデータ構造を使うようにしたとか 並列実行や並列GCにおいて局所性を高めて性能改善したとか 現在採用しているGCの方式とControl.Parallel.Strategiesライブラリの相性が悪く、メモリリークが起こることがあった問題を解消したとか これはparallelライブラリ

    Haskell忘年会 - maoeのブログ
  • The Expression Problem - maoeのブログ

    この記事はHaskell Advent Calendar jp 2010 : ATND向けに書いたものです。 最近、ふらふらとネットの波をさまよっていたら、Channel 9でRalf LaemmelさんがHaskellの型クラスを解説する動画を見つけました。これです。 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - The Expression Problem | Going Deep | Channel 9 C9 Lectures: Dr. Ralf Lämmel - Advanced Functional Programming - Type Classes | Going Deep | Channel 9 The Expression Problemと呼ばれるプログラミングにおける古典的な問題をネタに

    The Expression Problem - maoeのブログ
    ruicc
    ruicc 2010/12/17
    haskellでexpression problem
  • 1