Subscribed unsubscribe Subscribe Subscribe

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…

標準入力をブラウザでtail -fできるhtmlcatをHaskellで書いた

GNU screen 使っているとはいえ開発中に諸々のログを流しておくのにウィンドウ使うのに慣れてなくて、タブ開きまくるならやっぱりブラウザを使いたいってことで、標準入力をブラウザに出してくれるツールを書きました。 標準入力をブラウザで tail -f できる…

モナドトランスフォーマーとmonad-control

アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう…

函数プログラミングの集いに参加してきました

毎年、OCamlミーティングというイベントが開催されているそうなのですが、今年はICFPが東京で開かれることもあり、OCamlに限らない関数プログラミングのお祭りとして開催された「函数プログラミングの集い」に参加してきました。参加者の使用言語の分布が知…

最近のHaskellマップ

函数プログラミングの集い、Language update Haskell編の発表資料です。資料にはいろいろ書いてありますが、大事なことはひとつ、Hugsは死んだと言うことです。 最近のHaskellマップ View more presentations from Mitsutoshi Aoe

HakyllでGitHubのProject PagesのHTMLを作る

GitHub PagesはJekyllが使えるので素直にRubyの流儀に従えばいいのですが、Haskell使いならやはりHakyllを使いたくなります。HakyllはテンプレートにYesodで使われているhamletも使えるので、Yesod使いならなおさらです。というわけでHakyll + GitHub Pages…

Scoped type variablesが必要になるとき

whereの中の局所定義に型シグネチャを付けると Couldn't match type `a' with `a1' ...といわれて型検査を通らない!という経験はありませんか?これを直すには字句的スコープを持つ型変数が必要です。この機能はScopedTypeVariablesという言語拡張によって…

CabalizeされたHaskellプロジェクトでバージョン番号のbump upを忘れないためには

cabalファイルのversionは上げたけど、コマンドラインから--helpしたときに出力されるバージョン番号のアップデートを忘れていた!というのはよくある話です。僕も先日まで知らなかったのですが、cabalizeされたHaskellプロジェクトなら、cabalファイルで指…

TKYProfが少しかっこよくなったので、まじめに紹介します

先日プレアルファ版としてリリースしたTKYProfを少しかっこよくしました。今日はまじめにTKYProfの紹介を書きます。 TKYProfって何? Haskell処理系であるGHCのプロファイリング機能で出力されるテキストファイルを見やすくするためのツールです。具体的には…

GHCのプロファイル出力を可視化するTKYProf

GHCの出力するプロファイル情報はツリー上になっていて比較的読みやすいのですが、プログラムが大きくなるにつれ見にくく・醜くなっていきます。そこでd3.jsというJavaScriptのライブラリとYesodを使って、綺麗なグラフを出すツールを作ってみました。 tkypr…

存在型を全称限量子と代数的データ型でエンコードする

HaskellのGHC言語拡張に含まれる存在型は、existential quantifierを使わずにuniversal quantifierと代数的データ型を組み合わせて表現されます。以前からどうしてこんなことができるのかと思っていたのでそのカラクリを調べてみました。GHC言語拡張では存在…

Re: ファーストクラスIOと部品プログラミング

Haskell 界隈では、生産者/消費者のモデルとして、Enumerator/Iteratee (EI)が流行っている。しかし、EI を理解するのは難しい。 そこでこの記事では、もっと簡単な生産者/消費者モデルを示す。EI は Enumerator が Iteratee に push する push 型だが、紹介…

Haskellのエディタ支援ツールあれこれ

最近はいろいろなツールの開発が盛んで期待しています。Emacs系で継続的に開発されている or 作り始めでホットなものと言えば次の3つでしょう。 scion ghc-mod haskell-emacs 僕はというと、ベースのメジャーモードは定番(かつ微妙な)haskell-modeで、scio…

GitHubでgitflowを使う

gitflowが便利で気に入っています。人のプロジェクトをforkしたときは、どういう流れで使えばいいのかまとめている文書が見つからなかったので書いておきます。 プロジェクトをfork 手元にclone upstreamの登録など git flow init git flow feature start XX…

プログラミングCoqの2章をHaskellに翻訳してみた

皆さん、小悪魔CoqチュートリアルことプログラミングCoq読んでいますか?僕は大変楽しく読ませていただいています。今日第2章にあたるProof-editing mode であそぼうが公開されました。今回はCoqの証明支援の側面がよくわかる章になっていて興味深いのですが…

代数的データ型を使わないリスト

Haskellでは代数的データ型がよく使われています。取り扱いも簡単だしパターンマッチも便利。たとえばリストは次のように定義できます。 data List a = Nil | Cons a (List a) でも、実は代数的データ型を使わずにリストを表現することもできます。え?さっ…

GADTsとかPhantom typesとかExistential typesとか

長い文章を書くのに挫折したので、短くまとめる。3つを一言で表すとこうなる。 GADTsは、あるデータ型T aがあったとして、データ構成子の結果型がT a以外の型になっているような型 Phantom typesは、データ構成子で使われていない型変数を引数にもつ型 Exist…

Re: Haskell でダックタイピング 、色々な型を混ぜて配列を作る。

この forall a. という表記は冗長な気がするんだけど何で要るんだろう。。。 Haskell でダックタイピング 、色々な型を混ぜて配列を作る。 - 言語ゲーム existential typeのforallキーワードが必要なのには理由があります。元の定義Valをよくみてみると、 da…

The Expression Problem

この記事はHaskell Advent Calendar jp 2010 : ATND向けに書いたものです。最近、ふらふらとネットの波をさまよっていたら、Channel 9でRalf LaemmelさんがHaskellの型クラスを解説する動画を見つけました。これです。 C9 Lectures: Dr. Ralf Lämmel - Advan…

HIMA' #3: Arrow(と随伴関手)

日曜日に3回目のHIMA'を開きました。今回のテーマはArrowとid:itto100penさん一押しの随伴関手でした。ベースとなるテキストは関数プログラミングの楽しみを使いました。 進行は僕が10章「アローと計算」を読み上げ、疑問点が出てきたところでid:msakaiさん…

HIMA' #1: iteratee I/O勉強会

Boost.勉強会 #2と同じ日に同じ場所で、iteratee I/O勉強会を開きました。id:tanakhさんによるIteratee: Teaching an Old Fold New Tricksのまとめ記事を読み上げながら、参加者が気になったところに都度つっこみを入れるという形式で進めました。当初の予定…