タグ

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

  • 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のブログ
  • モナドトランスフォーマーとmonad-control - maoeのブログ

    アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。 その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう。 モナドトランスフォーマーと例外処理 Haskellerの皆さんはきっと息をするかのように自然にモナドを使っていることと思います。標準で提供されているモナドは単機能なので、組み合わせたくなってきます。必然的に皆モナドトランスフォーマーに手を伸ばすわけです。実際のアプリケーションのコードを書くと、多くのモナドではベースモナドがIOになるでしょうから、今度は自作したカスタムモナドスタックでIOが投げる例外をハンドルしたくなるわけです。 ここでふとControl.Exception.catchの型をみると Prelude> :t Control

    モナドトランスフォーマーとmonad-control - maoeのブログ
    igrep
    igrep 2015/09/04
    もう古い情報かもですがHaskellでのアプリ作りの参考までに
  • Re: Haskellの勉強で詰まってる部分 - maoeのブログ

    mizchi.hatenablog.com Haskellを習得する上で難しいポイントだと思います。大きく分けると次の二つにまとめられるのではないかと思います。 コードの中で現れる識別子からそれが何なのかを探しづらい Cabalがつらい それぞれ個人的な見解を書いてみます。 コード中の識別子の探し方 モナドのところの <$> とか <*> とか、え〜どっちがApplicativeで何がFunctorだっけ、そもそもその定義はなんだったっけ。え〜あ〜〜〜みたいになる。 と名前空間の そして名前で役割を推測することが困難な事が多々ある。mapM_ とか、前述した演算子とか。いや mapM_ は map があって mapM があって、っていう段階があるのは理解しているけど、ソース読んでて突然出現するそれには全く対応できない。 はどちらも識別子から型がわかれば大部分が解決します。ありがたいことに近

    Re: Haskellの勉強で詰まってる部分 - maoeのブログ
    igrep
    igrep 2015/04/12
    importのポリシーとか超参考になる!
  • debパッケージをデバッグシンボル付きでリビルドする - maoeのブログ

    HaskellのFFI呼び出しで返ってくる値がおかしいのでgdbでデバッグしたいという時、*-dbgパッケージがあればいいのだけどない場合は自分でパッケージをリビルドする必要がある。 sudo apt-get build-dep foo mkdir foo cd foo DEB_BUILD_OPTIONS="nostrip noopt debug" fakeroot apt-get source -b foo これでfooディレクトリの下にdebファイルができるのでインストールすればいい。あとはgdbなりcgdbなり適当なフロントエンドを使ってデバッグする。

    debパッケージをデバッグシンボル付きでリビルドする - maoeのブログ
  • GHCのヒーププロファイルの結果を適当に間引く - maoeのブログ

    GHCのヒーププロファイラが出力する.hpファイルは、計測対象のプログラムが動いている間ずっと追記されるので、長時間動かしているとファイルがとても大きくなって、hp2any-managerなどで開けなくなってしまう。 そういう場合は.hpファイルの中身を適当に間引くといいそうなので、ghpというスクリプトを書いた。 % ghp 10 big.hp とすると10サンプル中から1サンプルに間引いて標準出力に出力する。

    GHCのヒーププロファイルの結果を適当に間引く - maoeのブログ
  • 新しいlifted-asyncの使い方 - maoeのブログ

    monad-controlが新しくなって、モナド変換子スタックの各層がもつ状態を表すStTやStMがassociated data typesからassociated type synonymsに変わった。この変更でmonad-controlに依存するたくさんのパッケージが壊れ、拙作lifted-asyncも漏れなく壊れた。修正がてらいろいろ改善を施したのでその話をしようと思う。 Control.Concurrent.Async.Lifted.Safeモジュール v0.3.0から新たにControl.Concurrent.Async.Lifted.Safeモジュールが追加された。lifted-asyncをより安全に利用するため、既存・新規のコードにかかわらず使えるところではこちらのSafeモジュールを使い、適用できないところでのみ従来のControl.Concurrent.Async.Li

    新しいlifted-asyncの使い方 - maoeのブログ
    igrep
    igrep 2014/12/31
    ほとんど理解できなかったけどメモ。
  • 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のブログ
    igrep
    igrep 2014/12/25
    なるほど。自動的にPATHに追加できるようbashrcで頑張らなくても良かったのか。 cabal install --bindir ~/.cabal/bin --datadir ~/.cabal/share
  • Debug.Traceで関数の引数を表示するイディオム - maoeのブログ

    Haskellでよくある複数行の関数定義だったり、ガードを使っている場合、全ての場合について引数をtraceするコードが書きにくいことがある。例えば、 data A = A1 | ... data B = B1 | ... data C = C1 | ... f :: A -> B -> C -> ... f A1 b c = ... f a B1 c = ... f a b C1 = ... こんな定義でaとbとcをどの場合についてもtraceしたい場合、各行にそれぞれtraceを書く必要がありそうに見える。 f :: A -> B -> C -> ... f A1 b c = traceShow (A1, b, c) $ ... f a B1 c = traceShow (a, B1, c) $ ... f a b C1 = traceShow (a, b, C1) $ ... そうい

    Debug.Traceで関数の引数を表示するイディオム - maoeのブログ
    igrep
    igrep 2014/11/02
    おお、なるほどぉ!traceは第二引数をそのまんま返すから最初の式は必ずFalseになるわけだ!
  • HackageでHaddockが生成されない時は - maoeのブログ

    ここのところずっとHackageでHaddockの生成ボットが止まっているようで、新しくアップロードされたパッケージはたいていドキュメントが無い。どうも新しいサーバにHackageサーバを移しているようなのだけど、きっと忙しいんだろう。 自分で管理しているパッケージに関してはローカルでcabal haddockしたものをアップロードすることができるので、ここら辺を参考にすると幸せになれる。 Fūzetsu's Corner - Fix your Hackage documentation Fūzetsu's Corner - Hackage documentation v2 上のページのhackagedocsはパスワードに特定の記号が含まれているとこけるので、URLエンコードする版を貼っておく。

    HackageでHaddockが生成されない時は - maoeのブログ
    igrep
    igrep 2014/09/30
    なるほど、conduit-extraの最新版のドキュメントが見えないのはそのせいか。。。
  • Re: Real World Haskellの古いところ - maoeのブログ

    Real World Haskell の古いところ - あどけない話の25章と23章についてのコメントをまとめました。 > id:kazu-yamamotoさん profilingのところはコンパイルオプションがghc 6系の古いものなので http://t.co/tVoGa7aFzv を見た方が良さそう— Mitsutoshi Aoe/maoe (@ma0e) February 6, 2014 ヒーププロファイルはhp2psでも良いけどhp2anyシリーズの方が使い勝手が良いと思います http://t.co/yOK4EBrNWo— Mitsutoshi Aoe/maoe (@ma0e) February 6, 2014 正格性の指定のためにControl.Parallel.Strategiesを使っているけど、並列プログラミングではないなら同じparallelパッケージのControl

    Re: Real World Haskellの古いところ - maoeのブログ
  • Pattern synonymsの使い道 - maoeのブログ

    もうすぐ出る出ると言われ続けて久しいGHC 7.8は、大きめの新機能がいくつも入る。そのうちの一つがpattern synonymsという言語拡張で、これまで第一級市民でなかったパターンを、再利用可能な部品として扱えるようにする仕組み。チケットが登録されてから3年越しに実現された。 参考資料としては 7.3. Syntactic extensions PatternSynonyms – GHC PatternSynonyms - ghc trac : haskell あたりを読むと良い。 先日たまたまpattern synonymsのよい使いどころに遭遇したので紹介する。きっかけは data List m a = Nil | Cons a (m (List m a))みたいなリストってどっかのパッケージにないのかな— Mitsutoshi Aoe/maoe (@ma0e) March 26

    Pattern synonymsの使い道 - maoeのブログ
    igrep
    igrep 2014/06/21
    “パターンマッチのインタフェースを保ったまま、データ型の内部表現を変更できる”
  • GitHubと連携するチャットサービスGitterが便利そう - maoeのブログ

    普段使っていないメールボックスを覗いてみたら、Gitterからベータテストの招待状が届いていたので使ってみた。 使い方は簡単で、GitHubのOAuthでログインして自分のプロジェクト名をクリックするだけ。これでもうチャットルームが作られて、使えるようになる。 記法はGitHub flavouredなmarkdownが使える。GitHub Issuesとも連携しているので#と打つとissueの補完ができる。 さらにチャットルームの歯車アイコンからポチポチするだけでGitHub上でのコミットやコメント等の動きをチャットルームに流せる。.travis.ymlを弄ればTravis CIのビルド結果も流れるようになる。 この記事を書いている時点では GitHub Jenkins Travis Sprintly Trello に対応している。詳しいドキュメントはまだ無いようなので、公式ブログを覗いて

    GitHubと連携するチャットサービスGitterが便利そう - maoeのブログ
    igrep
    igrep 2014/01/19
    ああー、こういうの欲しかった!
  • 詳解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のブログ
  • 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のブログ
    igrep
    igrep 2013/09/28
    参考になる。
  • 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のブログ
  • FRPの話 - maoeのブログ

    Haskell Advent Calender 2012で久々にブログを書くということで、ついでにはてなダイアリーからはてなブログに移行してみた。記事やコメントはもちろんのこと、はてブも移行でき、なおかつundoもできるという素晴らしい仕様なので、安心して移行することができた。 さて、今回はFunctional Reactive Programming(FRP)の話。FRPとは、時間やシステム外部からの入力に対して応答するプログラムを関数的に表現する方法とでも言えばよいだろうか。 FRPというとまだ定番の実装もなく、実用にはほど遠いと考える人もいるかもしれない。実際、FRPの実装に関してはまだいろいろ研究・改良の余地があるとは思うものの、以前のように簡単にメモリリークするようなことも無く、最近では試してなるほど便利そうと思える段階にまでは洗練されてきていると思う。 FRPが登場してからの1

    FRPの話 - maoeのブログ
    igrep
    igrep 2012/12/29
    結構難しいけどブクマだけでもしておこう
  • 1