Mimi-tw_normal

Haskellの関数の適用や合成をどうイメージしていますか? Edit

  • pi_kumin
  • crakaC
  • laprasDrum
  • kachick@github
  • futoase@github
  • pogin503
  • yaotti
  • choplin
  • T_Hash
  • Vermee81@github
  • amkkun
  • mhayashi1120
  • ruicc
Edit

プログラミングHaskellなどを読んで、小さなコードは頭では分かるようになったのですが、大きなコードを読んだり自分で設計する際に、どのように関数の適用や合成などをイメージしたり図として表したらいいか分からず悩んでおります。

具体的には、f(x,y,z) = z*(x+y) という関数が表現したい場合、

sample.hs
(*) :: Num a => a->a->a
(+) :: Num a => a->a->a
f1 x y z = z * (x + y)
f2 x y = (*) $ (+) x y
f3 x = (*) . (+) x

のf1〜f3ような関数の書き方があると思います。また、次のような書き方は意図しない結果になっているのですが、

sample.h
g1 = (*) (+)
 -- :: (Num a, Num (a -> a -> a)) => (a -> a -> a) -> a -> a -> a
g2 x = (*) $ (+) x
 -- :: (Num (a -> a), Num a) => a -> (a -> a) -> a -> a
g3 = (*) . (+)
 -- No instance for (Num (a0 -> a0))
 --   arising from a use of `*'

これらの違いを考えるために、関数を何かイメージしたいと思っています。もちろん、型の情報や式を追えば明らかなのですが、もしイメージで理解できればわかりやすくなるのかなと勝手ながら期待しています。

そこで、普段みなさんはどのようにイメージしているのか、もし良いイメージの仕方や表記方法があれば教えてください。それは慣れの問題で、本物のHaskellerにはイメージなんか必要ないというのであればそれでも構いません。(慣れるようがんばります)

参考文献は論文でも英語でも構いません。できれば、無料でアクセスできる方が助かります。



Visual Haskell: A First Attempt

この Visual Haskell というHaskellコードの可視化の試みが求めていたものに近いのですが、これが欲しかったかというとちょっと詳細すぎる感じがするので、これを参考にもうちょっと考えたり探してみたりします。

Visual Haskell map

そのほか、調べて見つけたものを簡単に列挙します。

型クラス

Haskell Class Hierarchy Diagram - Saeed s Simple Blog - Site Home - MSDN Blogs

型クラスの依存関係

Haskell Class Hierarchy

bucephalus.org: Haskell number system in one picture

もう少し具体的なクラス図的なもの

Haskell98numbers

Typeclassopedia - HaskellWiki

モナド周辺の型クラスの依存関係

Typeclassopedia diagram

モナド, fmap, lift

Haskell/圏論 - wikibooks

圏を集合として、射(関数)を矢印として表す。圏論を使った抽象的なバックグラウンドな構造を表記する感じ。

Functor

モナドとモナド変換子のイメージを描いてみた - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

モナドや持ち上げのイメージ

liftM f m

Automatic Model Generation, part 1: Parallel - Communicating Haskell Processes

モナドを用いた並行処理・メッセージパッシング通信(たぶん)のアーキテクチャの解説の図。詳しく読めてないけど、λで引数を表したり、モナドをつなげたり、Read/Writeを形で表しているのが特徴的。

chp-monad1

その他

SourceGraphによるHaskellプログラムの可視化:Graphviz

自動生成による図ということは一般的な表記方法?

data type

legend_class

Conception of a Graphical Interface for Querying XML : Related work

XMLクエリーの可視化についての学位論文、各種のアルゴリズムやデータ構造の可視化がまとまってる。ここに Visual Haskell のリファレンスがあった。

他にも、何かいい方法がありましたら教えてください。

Sign up and follow kiwanami :)

Sign up with GitHub/Twitter

x close