タグ

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

  • FRPの話 - maoeのブログ

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

    FRPの話 - maoeのブログ
  • 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のブログ
  • Re: Haskellの勉強で詰まってる部分 - maoeのブログ

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

    Re: Haskellの勉強で詰まってる部分 - maoeのブログ
  • Mac OS XにThreadScopeをインストールする(2015年1月版) - maoeのブログ

    HomebrewのGTK+がQuartzバックエンドに対応したので、XのいらないThreadScopeが使えるようになった。手元の * GHC 7.8.4 * OS X Yosemite な環境では次のコマンドでインストールできた。 brew install gtk+ --without-x11 brew install gcc-4.9 cabal update cabal get threadscope cd threadscope-<version> cabal sandbox init cabal install gtk2hs-buildtools cabal install --bindir=~/.cabal/bin --datadir=~/.cabal/share --with-gcc=gcc-4.9 -fhave-quartz-gtk

    Mac OS XにThreadScopeをインストールする(2015年1月版) - maoeのブログ
  • モナドトランスフォーマーとmonad-control - maoeのブログ

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

    モナドトランスフォーマーとmonad-control - maoeのブログ
  • 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のブログ
    notae
    notae 2014/10/31
    ガード等で定義が分かれていない場合でも、独立した行にtraceを書くことでコメントアウトしやすくなるメリットがある。
  • 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のブログ
  • Entries in FRP category - maoeのブログ

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

    Entries in FRP category - maoeのブログ
  • Re: Haskell でダックタイピング 、色々な型を混ぜて配列を作る。 - maoeのブログ

    この forall a. という表記は冗長な気がするんだけど何で要るんだろう。。。 Haskell でダックタイピング 、色々な型を混ぜて配列を作る。 - 言語ゲーム existential typeのforallキーワードが必要なのには理由があります。元の定義Valをよくみてみると、 data Val = forall a. (Show a) => V a 左側(LSH; Left Hand Side)に型変数aが出てきません。何故このような定義になっているかは、普通の型を定義してみればよくわかります*1。 data Show a => Val a = V a この型Val aはヘテロなリストを構築するのには使えません。 Prelude> :t [V "1", V 2, V 3.4] <interactive>:1:15: No instance for (Fractional [Cha

    Re: Haskell でダックタイピング 、色々な型を混ぜて配列を作る。 - maoeのブログ
  • 存在型を全称限量子と代数的データ型でエンコードする - maoeのブログ

    HaskellのGHC言語拡張に含まれる存在型は、existential quantifierを使わずにuniversal quantifierと代数的データ型を組み合わせて表現されます。以前からどうしてこんなことができるのかと思っていたのでそのカラクリを調べてみました。 GHC言語拡張では存在型を次のように定義できます。 {-# LANGUAGE ExistentialQuantifications #-} data Q = forall x. P x このように型引数を取らないデータ型のデータ構成子に、全称量化された変数を持つような型を定義します。この定義は直接existential quantifierを使えば次のように表現できるものです。 -- 疑似Haskell。GHCではコンパイルできない。EHCならできるかも。 data Q = P (exists x. x) データ構成子の

  • やさしい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のブログ
  • 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のブログ
  • 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のブログ
  • 1