筆者 shelarcy

 Haskellは,関数型プログラミングというジャンルに属する言語です。Haskellや関数型プログラミングを題材に物事を見ていくことで,今まで思いもよらなかったような未知の世界を知ることができるでしょう。

 プログラミング言語を学ぶという行為には,

  1. 言語の基本的な文法や考え方を理解する
  2. 言語の文化圏で広く使われている考え方に親しんでその言語らしい書き方を習得する
  3. 単に言語を使ってできること以上の知恵を学ぶ

の3段階があります。この連載では,三つ目の段階を目標に,Haskellプログラミングの世界を一つひとつ丁寧に紹介していきます。

 更新は毎月第1水曜日(1月のみ第2水曜日)

連載目次

第58回 Cの配列をHaskellで利用する

第57回 機能テストや性能テストをCabalで自動化

第56回 Cabalを使ってパッケージを作成する

第55回 repaを使ってステンシル畳み込みを行う

第54回 repaを使って行列演算を定義する

第53回 repaを使って行列演算を並列化する

第52回 データ構造を走査するためのTraversableクラス

第51回 FunctorとMonadの間にあるApplicative

第50回 並列プログラミングにおける抽象化と細かい制御のトレードオフ

第49回 GHCの測定機能やプロファイラで並列プログラムの振る舞いを調べる

第48回 並列プログラムを高速化するための原則

第47回 領域漏れがあるプログラムを改良する

第46回 ヒープ・プロファイラで領域漏れを探る

第45回 GHCの性能測定機能でボトルネックを探す

第44回 progressionで複数の性能測定結果を比較する

第43回 criterionでプログラムの性能を測定する

第42回 ランダム・アクセスを行う処理を効率化するRecycling

第41回 任意の再帰構造による処理を融合変換できるStream Fusion

第40回 Stream Fusionによる融合変換で処理系の最適化機能を生かす

第39回 一般向けの「Haskell Platform」とインストール・ツールの「cabalコマンド」

第38回 書き換え規則を強力にサポートする段階制御

第37回 書き換え規則を使って不要な計算や中間データを除去

第36回 Int型のキーに特化したIntMap型

第35回 キーを使って値を参照するMap型

第34回 様々なデータ構造でfoldを使えるようにするFoldableクラス

第33回 木構造のSeq型を効率よく操作する

第32回 効率的なキューを表現するSeq型

第31回 禁断の機能「unsafePerformIO」の深淵

第30回 状態を扱う複数のモナドを合成したRWSモナド

第29回 グローバル変数の代わりに使えるReaderモナドとWriterモナド

第28回 例外やエラーに対する処理能力を加えるエラー・モナド

第27回 外部環境のエラーとHaskellの間の整合性を取る

第26回 例外の「中断・終了処理」としての側面

第25回 Haskell流の例外処理を学ぶ

第24回 マルチスレッド環境下でのFFIの利用

第23回 外部環境のメモリーとHaskellの間の整合性を取る

第22回 FFIを使って他の言語の関数を呼び出す

第21回 更新操作を一般化するためのSTモナド

第20回 更新を高速化するためのSTモナド

第19回 配列でデータ・アクセスの効率を上げる

第18回 QuickCheckを使ってできることとできないこと

第17回 QuickCheckでデータ駆動型テストを行う

第16回 Haskellでのテストの自動化を考える

第15回 Haskellでのデバッグのコツをつかむ

第14回 Haskellでメッセージ通信を使う利点

第13回 スレッド安全なI/Oの排他制御を実現する

第12回 Haskellで学ぶ並列プログラミング(その3) 並行プログラミングと並列処理

第11回 Haskellで学ぶ並列プログラミング(その2) 並列化手法

第10回 Haskellで学ぶ並列プログラミング(その1)

第9回 Haskellはなぜ遅いと思われているのか

第8回 遅延評価の仕組み

第7回 入出力と遅延評価の間を取り持つIOモナド

第6回 局所的な「状態」を利用するためのStateモナド

第5回 ListではなくMaybeを使う意義

第4回 「取り出し可能な値」のみを持つListモナド

第3回 mapからモナドを理解する

第2回 多相性(ポリモーフィズム)への理解を深める

第1回 関数型プログラミングの世界へようこそ