Haskell文法まとめ

Information

version date memo
0.1 2012/08/13 first
0.2-0.3 2012/08/25

version

ghc-7.1.4
ghc-6.12.3
Eclipse 4.2 + Eclipse FP

GHCコマンド

コマンド コマンド(省略) 処理
:info :i クラス情報
:kind :k 型の種(kind)表示
:load :l ロード(hsファイル)
:module :m モジュール切り替え
:quit :q 終了
:reload :r リロード(hsファイル)
:type :t 型表示
:help :h, :? ヘルプ

他コマンドについては、ヘルプコマンドより参照すべし。

GHCI起動までの流れ

Eclipse
  1. Haskellプロジェクトの作成
  2. hsファイルの作成
  3. インタプリタ(ghci)起動 & 編集中のファイルロード(F11)

Eclipseでやっても結局は、ghciでの作業になる。

Emacs
  1. hsファイル作成(emacsで開く)
  2. ghciの起動
    1. 別シェル(もう1個画面を開く)でghciを起動
    2. M-x eshellでEmacs内でシェルを起動

ghciの起動方式だが、1個目の方はタブなり、windowなりを切り替える事になるので、事によっては面倒。
2個目の方は、emacs内での処理になるので、Ctrl+x bでバッファの切り替えを行うだけになるのでオススメ。(但し、シェル内での操作もemacs準拠となるので、楽と言えば楽だが、多少違和感を感じる。)

文法

コメント
-- 1行コメント
{-
   複数行コメント
-}
ラムダ式

関数抽象、関数適用(1ページ目)
カリー化(2ページ目)

http://www.atmarkit.co.jp/fcoding/articles/haskell/02/haskell02a.html

関数抽象、関数適用詳細(ラムダ計算)

http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97

カリー化詳細

http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AA%E3%83%BC%E5%8C%96

部分適用

http://ha6.seikyou.ne.jp/home/yamanose/haskell/CURRY.HTML

Haskellの関数は、全て1引数の関数であり、2引数以上の関数は、関数を戻り値とする関数の再帰的適用でしかない。
2変数の関数:f(x,y) = x + y
これに、x=1,y=2を適用する場合は、
先ずy=2を適用してf(x,2) = x + 2という関数を取得
次にx=1を適用してf(1,2) = 3を取得
この様な感じで、2変数以上の場合の適用方法は、1つの変数の適用後に返却される関数に対して、さらに適用するという様な流れになる。

2項演算子の部分適用を特にセクションと言う。
(@ e) = \x -> x @ e
(e @) = \x -> e @ x
ここで、@は演算子、eは式

名前空間

参考リンク(名前空間, import, module...)

http://www.shido.info/hs/haskell11.html

※ ファイル名(拡張子除く)とモジュール名は一致する必要がある。

演算子

演算子纏め

http://d.hatena.ne.jp/marony0607/20111205/1323103005
-- $ : 区切り
-- output : [1,2,3]
(++) [1] $ map (+1) [1,2]