SlideShare a Scribd company logo
Haskell Lecture 1
kinokkory@shiatsumat
Haskellはどんな言語?
Haskellの特徴 ― PLUS
Pure
Lazy
Useful
Simple
純粋関数型言語
遅延評価
実用的
簡潔
HaskellはEsolangではない
• Haskellは十分実用性のある言語です。
• Haskellはわかりやすさを重視した言語です。
• 最初はとまどうこともあるとおもいますが、い
つのまにか体に染みこんでくるでしょう。
• 最初の一歩は重いものです。思いきって踏みだ
していきましょう。
Pure ― 純粋関数型言語
• 純粋 ― 参照透過性が守られているということ。
• 参照透過性 ― すべての式は、いつ計算しても同
じ値をもつということ。
• 処理の実行されるタイミングを考えなくてよく
なる。とくに、並行処理が簡単になる。
• 仕様を書くような感覚でプログラミングできる。
純粋関数型言語 pure functional language
参照透過性 referential transparency
Lazy ― 遅延評価
• 遅延評価、くわしくいうと必要渡しを原則とし
ている。
• 必要渡し ― 式を、必要になったときだけ計算す
る。一度計算した値は、なるべく再利用する。
• 計算量を減らすことができる。とくに、高速に
再帰的な処理をすることができる。
遅延評価 lazy evaluation
必要渡し call by need
Useful ― 実用的
• 高速である。
• バグがすくない。
• 書きやすく、読みやすい。
• テスト駆動開発、 C言語との連携、デバッガ、
パッケージ管理などのための使いやすいツール
がそろっている。
• 急成長しているので、これからもっと使われて
いくはず。
Simple ― 簡潔
• 短く、明快で、管理しやすい。
• インデントや記号をうまく利用している。
• 抽象的な記述ができる。
• すっきりした、合理的な文法である。
• 中毒性があるくらいに、書きやすい。
Haskellを動かそう!
Haskell Platform
• Haskell Platformを入れましょう。以上!
• GHC (コンパイラ), GHCi (インタープリタ),
Cabal (パッケージマネージャ), Haddock (文書
ジェネレータ), 便利なライブラリなどが入って
います。
エディタ
• VimやEmacsなど好きなものを使えばいいとお
もいます。インデントの設定だけ気をつけま
しょう (タブではなくスペースを推奨します) 。
• IDEをインストールすることもできますが、お
すすめできるIDEはいまのところありません。
動かそう!
• ghc *.hs ― コンパイラ
• ghci ― インタープリタ
• cabal install * ― ライブラリの取得
Haskellの文法を一気に学ぼう!
どうやって?
• 基本的な概念の意味を概観していきます。
• リファレンスとして、 BNF記法に近いスタイル
の文法を書いてあります。文法は実際よりも多
少簡略化してあります。いまのところは無視し
てもかまいません。
• 基本的にトップダウンの順番で説明します。
どうすればいいの?
• 基本的な文法を網羅することを重視しているの
で情報量が多いですが、重要度のぶんだけ星印
★をつけたので、それを参考にして適当に読み
とばしていってください。
• 入門書を併用することを強くおすすめします。
• とりあえずざっと理解したら、プログラムを書
いてみましょう。
記号一覧
• [pattern] オプション
• {pattern} 0回以上の繰りかえし
• {pattern}+ 1回以上の繰りかえし
• (pattern) グループ化
• pattern1 | pattern2 選択
• pattern<pattern’> 差異
• ... 同様に繰りかえす
• [a..zA..Z] アルファベット一文字
さっそくはじめよう!
プログラム
• プログラムは、複数のモジュールからなる。
• プログラムはMainモジュールのmain関数から実
行される。
• もうすこしキザな言いかたをすると、プログラ
ムの値はMainモジュールのmainである。
★★★★★
モジュール
• モジュールは、モジュール宣言とインポート宣
言とトップレベル宣言からなる。一つのファイ
ルが一つのモジュールをなさなければならない。
• モジュールは階層化できる。
• Mainのモジュール宣言のみ省略できる。
• モジュール名とファイル名は基本的に一致して
いる必要がある (Mainモジュールは例外)。また、
モジュールの階層はフォルダの階層と一致して
いる必要がある。
★★★★★
エクスポート宣言
• モジュール宣言にはエクスポート宣言を含める
ことができる。エクスポート宣言というのは、
いわゆるpublicにするエンティティを指定する
ことである。ほかのエンティティはprivateにな
る。エンティティとは、変数/関数や型や型クラ
スなどである。
• エクスポート宣言を付けない場合、すべてのエ
ンティティがpublicとなる。
★★★★★
インポート宣言
• インポート宣言とは、あるモジュールでpublic
になっているエンティティを使えるようにする
ためのものである。
• インポートするエンティティを指定することも
できる。
• デフォルトではとくにプレフィクスを付けない
で使えるが、プレフィクスを付けて使うように
することもできる。
★★★★★
module →
module modid where
body
| module modid (export1, ...) where
body
| body
modid → {modid’ .} modid’
modid’ → [A..Z] {[a..zA..Z0..9’]} 一文字目は大文字
module Main (main) where を省略したことになる
export →
qvar
| qtycon
| qtycon (..)
| qtycon (cname1, ...)
| qtycls
| qtycls (..)
| qtycls (qvar1, ...)
| module modid
型構築子のみ
型構築子・データ構築子・フィールドラベルのすべて
データ構築子とフィールドラベルを指定
型クラスのみ
型クラスとクラスメソッドのすべて
クラスメソッドを指定
body → {impdecl}{topdecl}
impdecl →
import modid [impspec]
| import modid as modid’ [impspec]
| import qualified modid [impspec]
| import qualified modid as modid’ [impspec]
impspec →
(import1, ...)
| hiding (import1, ...)
import →
var
| tycon [(..) | (cname1, ...)]
| tycls [(..) | (var1, ...)]
インポートするものを指定
インポートしないものを指定
qualifiedでプレフィックスを義務化
デフォルトではモジュール
名がプレフィックス
プレフィックス
を指定
topdecl →
typedecl
| datadecl
| newtypedecl
| classdecl
| instdecl
| defaultdecl
| decl
decl →
vardecl
| sigdecl
| fixitydecl
型
• Haskellの型は表現力豊かである。型を見るだけ
でかなりの情報を得られる。また、型エラーだ
けでかなりのバグを検出できる。
• 型安全 ― 不正な型変換がない。
• 静的型付け ― コンパイル時に式の型が決まる。
★★★★★
型安全 type-safe
静的型付け static typing
多相型
• パラメータ多相 ― 型を型引数によって全称量化
することができる。C++のテンプレート関数の
ようなものである。
• アドホック多相 ― 型引数に型クラスという制約
をつけて全称量化することができる。C++の関
数オーバーロードのようなものである。アド
ホック多相は、Haskellの重要な特徴である。
★★★★★
多相型 polymorphic type
パラメータ多相 parametric polymorphism
アドホック多相 ad-hoc polymorphism
様々な型
• 数値型 Int, Integer, Float, Double, ...
• 文字型 Char (文字列型は[Char])
• リスト型 [a]
• ユニット型 ()
• タプル型 (a,b,c)
• 関数型 a->b
★★★★★
関数型
• 関数型は一引数関数を表す。
• 2引数関数は次の2つの表現方法がある。
▫ f :: (a,b)->c
 x :: a, y :: b のとき、f (x,y) :: c
▫ f :: a->b->c
 x :: a, y :: b のとき、f x y :: c
• Haskellでは2番目をよく用いる。1番目から2番
目への変換をカリー化という。また、「f x」の
ようにすることを部分適用という。
★★★★★
a->b->c = a->(b->c)
f x y = (f x) y
カリー化 currying
部分適用 partial application
型推論
• コンパイラは強力な型推論器を持っている。コ
ンパイラはどの式についても、自動で型を付け
て、型エラーをチェックしてくれる。
• 推論された型は多相型になりうる。Haskellでは、
どの式についても、すべての可能性を含む最も
条件のきつい型(主要型)が存在する。型推論
器が推論するのはまさにこの主要型である。
★★★★★
型推論 type inference
主要型 main type
type → btype [-> type]
btype → {atype}+
atype →
qtycon
| tyvar
| ()
| (type1, ... ,typen)
| [type]
| (type)
simpletype → tycon tyvar1 ... tyvarn
qtycon → [modid .] tycon
tycon → [A..Z] {[a..zA..Z0..9’]}
tyvar → [a..z] {[a..zA..Z0..9’]}
型構築子
型変数
ユニット型
タプル型
型適用
関数型
一文字目は大文字
一文字目は小文字
リスト型
ここからが本番!
代数的データ型
• ユーザーが作ることのできるデータ型。
• 大まかにいうと、代数的データ型とは「直積の
直和」である。C言語でいえば、「構造体の共
用体」である。直積はタプルとして考えてよい
が、直和がすこしややこしい。直和はC言語の
共用体と少し違い、どの状態であるかが保持さ
れている。とくに、代数的データ型のうち、空
の型の直和であるものは列挙型であるとみなす
こともできる。
★★★★★
代数的データ型 algebraic data type
代数的データ型 2
• 代数的データ型は型変数を付けくわえることが
できる。C++のテンプレートクラスのようなも
のである。
• 代数的データ型で宣言する型を型構築子といい、
それぞれの直和にたいする名前をデータ構築子
という。データ構築子はデータを生成する関数
としてみなせると同時に、データの状態を表す
ものともみなせて、パターンマッチに使うこと
ができる。
★★★★★
型構築子 data constructor
データ構築子 data constructor
再帰的な代数的データ型
• 代数的データ型は再帰的に定義することができ
る。
• その代表格がリストである。ほかにも二分木や
多分木や抽象構文木なども再帰的な代数的デー
タ型として書くことができる。基本的に、
Haskellは木構造の処理をおこないやすい。
★★★★★
フィールド記法
• 基本的に代数的データ型の中のデータはパター
ンマッチで取り出すことができるが、メンバに
対しフィールドラベルという名前を付けること
ができる。
• フィールドラベルによって、代数的データ型の
中のデータを取り出すことができるだけでなく、
代数的データ型を簡単に更新するのにも使うこ
とができる。また、パターンマッチにも使うこ
とができる。
★★★★★
型クラス
• 型クラスは、アドホック多相あるいは関数オー
バーロードを実現するためのものである。C++
のインターフェースのようなものであり、メン
バを持つ。型クラスは型ではない。
• 基本的にメンバの型のみ宣言するが、メンバに
デフォルトの値を持たせることもできる。
• 型クラスには、Read (文字列から変換可能)、
Show (文字列へ変換可能)、Num (数値)、Ord
(順序)、Functor (関手)、Monad (モナド) など
がある。
★★★★★
型クラス type class
インスタンス宣言
• インスタンス宣言とは、ある型が型クラスの条
件を満たしていることの宣言である。具体的に
は、メンバの実装を含む。メンバの実装は、そ
の型について具体的に行われる。
• 一部の型クラス (Eq, Ord, Enum, Bounded,
Show, Read など) については、代数的データ型
の宣言の際にderiving修飾子のあとに書いてお
くだけで実装を書かなくてもインスタンス化し
てくれる。
★★★★★
文脈
• ある型変数がある型クラスのインスタンスでな
ければならないという条件を加えるためもの。
関数/変数の型宣言に用いることができる。
• 型クラスの宣言でも、型変数にたいし文脈に
よって制限をくわえることができる。この文脈
は、宣言する型クラスを別の型クラスの子クラ
スにするためのものとして見ることができる。
★★★★★
型シノニム
• 単なる型の別名。C言語のtypdefのようなもの。
• ただし、型変数を持たせることができる。
★★★★★
正格性フラグ
• 代数的データ型の宣言において、中のデータが
正格評価されることを保証するものである。正
格評価とは、遅延評価と対照的な概念であり、
即座に評価するということである。
• 正格性フラグを使いこなすのは割と難しいが、
メモリの削減のために使うべきことも多い。と
くに、Intなどのサイズの小さい型については使
うほうがいいことが多い。
• さらに{-#UNPACK#-}というプラグマを付ける
場合もある。
★★★★★
newtype宣言
• 既存の型と似ている型を宣言するときにつかう。
あくまで型シノニムとは違い、新しい型の宣言
である。
• 機能としては代数的データ型の宣言に正格性フ
ラグをくわえたようなものであり、いわば糖衣
構文である。
★★★★★
datadecl →
data [context =>] simpletype = constr1 | ...
[deriving]
constr →
con [!] atype1 ... [!] atypek
| (btype | !atype) conop (btype | !atype)
| con {var11, ..., var1m :: (type1 | !atype1), ...}
deriving →
deriving qtycls
| deriving (qtycls, ...)
con → conid | (consym)
conop → consym | `conid`
conid → [A..Z] {[a..zA..Z0..9’]}
consym → (: {symbol | :})<reservedop>
newtypedecl →
newtype [context =>] simpletype = newconstr
[deriving]
newconstr →
con atype
| con {var :: type}
var → varid | (varsym)
varid → [a..z] {[a..zA..Z0..9’]}
varsym → (symbol {symbol | :})<reservedop>
typedecl → type simpletype = type
classdecl →class [scontext =>] tycls tyvar
where {cdecl1; ...}
class → qtycls tyvar | qtycls (tyvar atype1 ... atypen)
context → class | (class1, ..., classn)
simpleclass → qtycls tyvar
scontext → simpleclass | (simpleclass1,...,simpleclassn)
cdecl → vardecl’ | sigdecl | fixitydecl
qtycls → [modid . ] tycls
tycls → [A..Z] {[a..zA..Z0..9’]}
tyvar → [a..z] {[a..zA..Z0..9’]}
instdecl→ instance [scontext =>] qtycls inst
[where {idecl1; ...}]
inst →
qtycon
| (qtycon tyvar1 ... tyvarn)
| (tyvar1, ..., tyvarn)
| [tyvar]
| (tyvar1 -> tyvar2)
idecl → vardecl’
式
• 参照透過性が保たれている。
• 単体の変数/関数も式の一種である。変数/関数
は式の別名として見てもいい。
• if式・case式・ラムダ式などがある。while式の
ような繰り返しの機構はない。
★★★★★
リテラル
• 整数 123 :: (Num a) => a
• 浮動小数 1.23 :: (Fractional a) => a
• 文字 ‘c’ :: Char
• 文字列 “abc” :: String (=[Char])
★★★★★
ラムダ式
• いわば「関数のリテラル」である。
• 以上。
★★★★★
リスト
• aのリストの型は[a]
• [1,2,3] :: [Int]
• [1,2,3] = 1 : 2 : 3 : [] ( : は右結合)
★★★★★
パターン
• データについて条件分岐と分解を同時にするた
めのもの。とくに代数的データ型を分解するの
につかえる。おそろしく便利である。
• パターンを照合することをパターンマッチとい
う。
• なんだかんだいってすぐ慣れる。
• 変数/関数宣言やcase式などにおいて使える。
★★★★★
ガード
• パターンにさらに条件分岐をつけくわえるため
のもの。
• なんだかんだいってすぐ慣れる。
★★★★★
exp → exp0 [:: [context =>] type]
expi →
expi+1 [qop(n,i) expi+1]
| lexpi
| rexpi
lexpi → (lexpi | expi+1) qop(l,i) expi+1
rexpi → expi+1 qop(r,i) (rexpi | expi+1)
qop → qvarsym | `qvarid` | qconsym | `qconid`
qvarsym → [modid . ] varsym
qvarid → [modid . ] varid
qconsym→ [modid . ] consym
qconid → [modid . ] conid
型シグネチャ
中置演算子の処理
exp10 →
¥ apat1 ... apatn -> exp
| let {decl1; ...} in exp
| if exp then exp else exp
| case exp of {alt1; ...}
| doexp
| {aexp}+
alt →
pat -> exp [where {decl1; ...}]
| pat {| exp0 -> exp}+ [where {decl1; ...}]
ラムダ式
局所宣言
if式
case式
do式
関数適用
aexp →
qvar
| qcon
| literal
| (exp)
| (exp1, ..., expn)
| [exp1, ..., expn]
| [exp1 [, exp2] .. [exp3]]
| [exp | qual1, ..., qualn]
| (expi+1 qop(a,i))
| (lexpi qop(l,i))
| (qop(a,i)
<-> expi+1)
| (qop(r,i)
<-> rexpi)
| qcon {qvar1=exp1; ...}
| aexp<qcon> {qvar1=exp1; ...}
等差数列リスト
タプル
リスト
リスト内包記法
セクション
データの構築
データの更新
pat → pat0
pati →
pati+1 [qconop(n,i) pati+1]
| lpati
| rpati
lpati → (lpati | pati+1) qconop(l,i) pati+1
rpati → pati+1 qconop(r,i) (rapti | pati+1)
中置演算子の処理
pat10 →
apat
| gcon apat1 ... apatn
apat →
var
| var [@ apat]
| qcon {qvar1=pat1, ...}
| literal
| _
| (pat1, ... , patn)
| [pat1, ..., patn]
| ~apat
| (pat)
データ構築子
変数
アズパターン
ラベル付きデータ構築子
リテラル
ワイルドカード
タプル
リスト
反駁不可パターン
変数/関数宣言
• 型シグネチャのあとに定義を複数の等式として
書いていく。左辺、とくに引数についてパター
ンやガードによる条件分岐をおこなうことがで
きる。わりと自由なパターンマッチができて、
複数の変数/関数を一気に定義することもできる。
• 型シグネチャには文脈をくわえることができる。
• 変数宣言は0引数の関数の宣言のようなものだ
ととらえることができる。
• そのほか、局所宣言としてletやwhileがある。
★★★★★
vardecl → (funlhs | pat0) rhs
vardecl’→ (funlhs | var) rhs
funlhs →
var {apat}+
| pati+1 varop(a,i) pati+1
| lpati varop(l,i) pati+1
| pati+1 varop(r,i) rpati
| (funlhs) {apat}+
rhs →
= exp [where {decl1; ...}]
| {| exp0 = exp}+ [where {decl1; ...}]
モナド
• モナドは関数型プログラミング上で手続き型プ
ログラミングを再構築するために考えられた。
• 決して複雑怪奇なものではなく、慣れれば非常
に便利なものである。
• モナドはこわくなんてない!
★★★★★
モナドの意味
-- m a は a の型の値を出力する計算である。
class Monad m where
-- x >>= f は計算 x の結果を f に渡し、
-- 新たな計算を得るということである。
(>>=) :: m a -> (a -> m b) -> m b
-- return c は値cを返す単純な計算である。
return :: a -> m a
破壊的操作とモナド
• 入出力、乱数生成、(メモリの削減のための)
変数への代入など、プログラミングにおいて参
照透過性を壊すような操作(破壊的操作)が必
要となることは多い。
• IOモナドやSTモナドをもちいることによって、
これらの操作を参照透過性を壊さずにおこなう
ことができるようになる。(実は IO a -> a と
いう型を持つある関数を使うと参照透過性は守
られないが、この関数は原則としてつかわない
ことが推奨されている。)
do記法
• モナドを手続き型言語らしく書くための便利な
記法である。
• do記法は糖衣構文であり、単純なルールによっ
て>>=をもちいたモナドらしい書き方に変換さ
れる。
★★★★★
doexp → do {stmt1; ...; stmtn; exp}
stmt →
exp
| pat <- exp
| let {decl1; ...}
あとすこし!
コメント
• -- 一行コメント
• {- 複数行コメント
{-入れ子にできる-}
複数行コメント -}
★★★★★
インデント
• Haskellには{a;b;...}というような記法とは別に、
インデントを用いる記法もある。単に記法の違
いである。
• インデントは、オフサイドルールというルール
にもとづいて解釈される。
★★★★★
中置演算子
• 記号は中置演算子としてもちいることができる。
• 普通の名前もバッククオート`...`で囲めば中置演
算子としてつかえる。
• 記号についてはセクションという機能もある。
たとえば、x::a, y::b のとき x%y::c だとすると、
▫ (%) :: a -> b -> c
▫ (x%) :: b -> c
▫ (%y) :: a -> c
• 中置演算子の結合性 (左/右/無結合) と優先順位
を宣言することができる。
★★★★★
文芸的スタイル
• ¥begin{code}と¥end{code}ではさまれた部分
だけがソースコードとなり、残りはコメントと
なる。
• そのままTeXのソースコードとして読み取るこ
ともできる。
• 標準ライブラリで多用されているスタイル。
• 拡張子は.lhsとする。
★★★★★
fixitydecl →
(infixl | infixr | infix) [integer] op1, ..., opn
op → varop | conop
おつかれさまです!
• ほんとうに、おつかれさまです。
• これで、文法はほぼ網羅しました。
• 次のステップへ進みましょう!
Haskellライフを始めよう!
ライブラリ
• Hoogleで簡単に調べられます。ソースコードを
見ることもできます。
▫ http://www.haskell.org/hoogle/
マニュアル
• ghcマニュアルの和訳があります。
▫ http://www.kotha.net/ghcguide_ja/latest/
本
• すごいHaskellたのしく学ぼう!
• 関数プログラミング入門
• 関数プログラミングの楽しみ
• プログラミングHaskell
• ふつうのHaskellプログラミング
サイト
• 本物のプログラマはHaskellを使う
▫ http://itpro.nikkeibp.co.jp/article/COLUMN/20
060915/248215/
• Wikibooks Haskell
▫ http://ja.wikibooks.org/wiki/Haskell
• HaskellWiki
▫ http://www.haskell.org/haskellwiki/Haskell
プログラムを書いてみよう!
• とにかく書いてみましょう。
• オンラインジャッジもぜひ利用してください。
▫ https://judge.npca.jp/problems
▫ http://codeforces.com/problemset
▫ http://www.spoj.com/problems/classical/
プログラムを読んでみよう!
• 実際のHaskellのプログラムをたくさん読んでみ
ましょう。
• とくに、Hoogle上でソースコードを参照するこ
とができるので、読んでみましょう。Data.List
などがおすすめです。
Haskell Lecture 2 へつづく

More Related Content

PDF
プログラミングHaskell(第1章)
KEY
Lecture1
ODP
Vim scriptとJavaとHaskell
PDF
数学プログラムを Haskell で書くべき 6 の理由
PDF
Scalaノススメ
PDF
プログラミングHaskell(第2章)
PPTX
Scalaで学ぶ関数型言語超入門
PDF
Haskell超入門 Part.1
プログラミングHaskell(第1章)
Lecture1
Vim scriptとJavaとHaskell
数学プログラムを Haskell で書くべき 6 の理由
Scalaノススメ
プログラミングHaskell(第2章)
Scalaで学ぶ関数型言語超入門
Haskell超入門 Part.1

What's hot (7)

PDF
Phantom Type in Scala
PPTX
Scalaで学ぶ関数型言語超入門
PDF
Scala is-unscared
PDF
こわくないScala
PDF
磯野ー!関数型言語やろうぜー!
PDF
Scalaで萌える関数型プログラミング[完全版]
KEY
Algebraic DP: 動的計画法を書きやすく
Phantom Type in Scala
Scalaで学ぶ関数型言語超入門
Scala is-unscared
こわくないScala
磯野ー!関数型言語やろうぜー!
Scalaで萌える関数型プログラミング[完全版]
Algebraic DP: 動的計画法を書きやすく
Ad

Viewers also liked (8)

PDF
型! 型!
PDF
「7つの言語、7つの世界」を読む
PDF
Haskell で LINE Bot を作ってみた
PPTX
IdrisでWebアプリを書く
PDF
Haskell Backpack 事始め
PDF
Elm overview
PDF
Elmで始めるFunctional Reactive Programming
PDF
ADVENTAR の Bot を作る with Haskell
型! 型!
「7つの言語、7つの世界」を読む
Haskell で LINE Bot を作ってみた
IdrisでWebアプリを書く
Haskell Backpack 事始め
Elm overview
Elmで始めるFunctional Reactive Programming
ADVENTAR の Bot を作る with Haskell
Ad

Similar to Haskell Lecture 1 (20)

PDF
初めてのHaskell (表)
ODP
Haskell
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PDF
Haskell勉強会 in ie
PDF
すごいHaskell読書会
PDF
Haskell勉強会2 in ie
PDF
関数プログラミング入門
PDF
すごいHaskell読書会#1 in 大阪
PDF
すごいHaskell楽しく学ぼう 第6章
PDF
スタートHaskell2 型を信じろ
PDF
Javaプログラミング入門
PDF
F#入門 ~関数プログラミングとは何か~
PDF
すごいHaskell楽しく学ぼう-第12章モノイド-
PDF
関数型プログラミング入門 with OCaml
PDF
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
PDF
たのしい関数型
PPT
言語処理系入門€5
PDF
すごいHaskell読書会 第7章 (前編)
PPTX
サンプルで学ぶAlloy
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
初めてのHaskell (表)
Haskell
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Haskell勉強会 in ie
すごいHaskell読書会
Haskell勉強会2 in ie
関数プログラミング入門
すごいHaskell読書会#1 in 大阪
すごいHaskell楽しく学ぼう 第6章
スタートHaskell2 型を信じろ
Javaプログラミング入門
F#入門 ~関数プログラミングとは何か~
すごいHaskell楽しく学ぼう-第12章モノイド-
関数型プログラミング入門 with OCaml
純LISPから考える関数型言語のプリミティブ: Clojure, Elixir, Haskell, Scala
たのしい関数型
言語処理系入門€5
すごいHaskell読書会 第7章 (前編)
サンプルで学ぶAlloy
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ

More from Yusuke Matsushita (11)

PDF
NPC April Fool's Contest 2014 累乗数
PDF
Haskell Lecture 2
PDF
ドロネー三角形分割
PDF
関数型プログラミングのすゝめ
PDF
型理論 なんて自分には関係ないと思っているあなたへ
PDF
C#への招待
PDF
Modeling Concurrent Computing
PDF
Programmers, be a Wikipedian
PPTX
OpenMPI入門
PDF
確率解析計算
PDF
プログラミング・パラダイム
NPC April Fool's Contest 2014 累乗数
Haskell Lecture 2
ドロネー三角形分割
関数型プログラミングのすゝめ
型理論 なんて自分には関係ないと思っているあなたへ
C#への招待
Modeling Concurrent Computing
Programmers, be a Wikipedian
OpenMPI入門
確率解析計算
プログラミング・パラダイム

Haskell Lecture 1