Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Haskell完全マスター:純粋関数型プログラミング入門
103 students

Haskell完全マスター:純粋関数型プログラミング入門

歴史と思想から型クラス・モナド・並行性まで、GHCで学ぶ実践的な関数型プログラミングの全体像
Last updated 7/2026
Japanese

What you'll learn

  • Haskellの歴史・思想・生態系を俯瞰し、他の関数型言語との位置関係を説明できる
  • ghci、Cabal、Stack、Hackage/Stackageを使いこなしてプロジェクトを構築できる
  • let/where、パターンマッチ、ガード、case式を使い分けて宣言的なコードを書ける
  • カリー化、部分適用、高階関数、関数合成を駆使して再利用性の高い関数を設計できる
  • data、newtype、レコード構文、Maybe/Eitherで安全なドメイン型を表現できる
  • Functor、Applicative、Monadの階層を理解し、do記法とIOで副作用を型で隔離できる
  • 型クラスを自作し、derivingと制約付き多相で汎用的なAPIを設計できる
  • 遅延評価の利点と落とし穴(スペースリーク)を把握し、正格性で性能を制御できる
  • forkIO、MVar、async、STMを用いて安全な並行プログラムを記述できる
  • bracketとwithFileでリソースを確実に解放する例外安全なコードが書ける

Course content

1 section48 lectures
  • Haskell誕生の物語 — 1987年から現在まで4:34

    1987年にオレゴン州ポートランドで関数型プログラミング言語会議の場でHaskellが産声を上げてから現在に至るまでの物語を、年表に沿ってたどります。遅延評価型言語の系譜、Haskell委員会が標準言語を作るに至った経緯、論理学者ハスケル・カリーにちなんだ命名の由来、そしてHaskell 98から2010、現在のGHC拡張中心の進化スタイルへと続く流れがつかめます。

  • Hello, Haskell — putStrLnと最初のmain5:39

    main関数とputStrLnを使った、初めての実行可能なHaskellプログラムを書きます。mainがIOアクションであること、たった二行の最小形を確認し、ghciでの即時評価と.hsファイルのコンパイル実行という二つのワークフローを実際のターミナル出力で体験したうえで、do記法で複数のメッセージを順に並べ、最後に出力をあなた自身のキャラクター宣言に書き換えてみます。

  • letとwhere — Haskellにおける「変数」の正体5:18

    Haskellには再代入できる変数が存在しないという事実を起点に、letバインディングとwhere節で局所的に名前を導入する方法を学びます。同じ計算を二通りで書き比べることで、プログラムを「評価順序」ではなく「定義の集まり」として捉える視点に切り替わり、最後に複数の値を組み立てる計算をletとwhereの両方で書く練習で手になじませます。

  • 基本型めぐり — Int、Integer、Double、Char、Bool7:22

    ghciの:typeコマンドを使いながら、Haskellの基本型を一つずつ確認していきます。固定幅のIntと任意精度のIntegerの違い、浮動小数のDouble、単一文字のChar、真偽値のBool、そしてStringが[Char]の糖衣構文であることを評価結果と一緒に見て、最後にこれら全部の型を一画面のステータス表示にまとめてみます。

  • 型注釈と型推論 — :: の読み方8:02

    値や関数に明示的に型を書く::記法と、Hindley-Milner型推論によって型注釈を省ける世界の、両方を行き来します。同じ関数を型注釈ありとなしで定義し、ghciで推論結果を表示させて見比べ、わざとあいまいな式を書いて推論が失敗する瞬間を観察し、それを型注釈で解消する練習に取り組みます。

  • 評価モデルの直観 — 正格評価と遅延評価を絵で理解する8:27

    このセクションで唯一コードを書かない、評価戦略を絵で理解するための講義です。命令型言語の正格評価とHaskell標準の遅延評価を、サンク(未評価の計算)が必要になったときだけ展開されていく様子で対比し、undefinedを安全に持ち歩ける理由、無限リストが実用上扱える理由、そして後で出会うスペースリークの種が、ここで直観として頭に入ります。

  • Haskellの設計哲学 — 純粋性・遅延評価・強い型付け3:44

    Haskellを他の言語と決定的に分ける三本柱、すなわち参照透過性に基づく純粋関数、デフォルトで遅延評価される計算モデル、Hindley-Milner由来の強力な静的型システムを、概念図と比較で読み解きます。それぞれの設計判断がなぜ採用されたのか、命令型言語とはどう違うのか、実務でどんな恩恵と制約を生むのかが見えてきます。

  • 算術・比較・論理演算子 — 中置と前置の往復8:40

    +、*、div、mod、==、/=、&&、||といった基本的な演算子を、中置記法と前置の関数記法の両方で扱います。短い式を次々に評価しながら、バッククォートで関数を中置にする記法と、括弧で演算子を前置にする記法を相互に書き換える練習を通じて、「Haskellでは演算子も普通の関数だ」という感覚が体に入ります。

  • if-then-else — 文ではなく式として使う5:53

    Haskellのif-then-elseが文ではなく値を返す式であることを、体力チェックや絶対値関数myAbsを書きながら体感します。else節が必須であること、then節とelse節の型が一致しなければならないことを確認し、最後に三項演算子に相当する小さなternary関数を自分で書いてみます。

  • ガード式 — 多分岐をエレガントに書く7:45

    ネストしたif式を、縦棒|を使うガード記法でエレガントに書き換えます。状態に応じてメッセージを切り替える、しきい値でランクを判定するような多分岐ロジックを、otherwiseを最後に置く読みやすい形で実装し、ガードが上から順に評価される仕組みを構造から理解したうえで、where節とガードを組み合わせた判定関数を書く練習に取り組みます。

  • パターンマッチの基本 — 引数で分岐する関数定義6:38

    関数の引数側に直接パターンを書いて分岐させる、Haskell特有の関数定義スタイルを身につけます。階乗関数の0とnの二パターン定義、リストの[]と(x:xs)による分解、タプル(a,b)の取り出し、ワイルドカード_の使いどころを学び、最後に空・単独・複数で分岐する小さな関数をパターンマッチだけで書き上げます。

  • case式 — 関数定義の外でパターンマッチする4:30

    関数の頭でしか使えないと思いがちなパターンマッチを、case ... of式によって任意の場所で使う方法を学びます。文字列を別の文字列に変換する例や、derivingした独自データ型に対するcaseでcaseの構文を押さえ、ガードとcaseを組み合わせた書き方も見たうえで、if-elseで書かれたコードをcase式に書き換える練習をします。

  • Haskellの弱点と批判 — 学習曲線・実行時の落とし穴・採用障壁3:25

    Haskellを称賛するだけでなく、現実に存在する欠点とよく聞かれる批判を正面から見つめます。急峻な学習曲線、モナドや型クラスという抽象化の壁、遅延評価が招くスペースリーク、ライブラリ生態系の断片化、人材確保の難しさ、「美しいが書ける人が少ない」という立ち位置を、データと逸話を交えてフェアに整理し、これから何に備えるべきかの心構えが得られます。

  • 関数定義の基礎 — 引数列と等式5:09

    Haskellの関数定義が「左辺=右辺」という数学的な等式の集まりであるという視点で、二つの引数を取る単純な関数群を書きます。二引数の加算、一引数の二乗、Doubleを使った斜辺の長さhypotenuseを順に定義しながら、関数呼び出しが空白区切りで書かれることに慣れ、最後に複数の関数を組み合わせる関数を自分で書いてみます。

  • カリー化と部分適用 — 引数を一つずつ食わせる6:22

    Haskellの関数がすべて一引数関数の連鎖であるというカリー化の事実を、型シグネチャa -> b -> cの矢印が右結合である点から理解します。二引数関数を部分適用して新しい関数を量産する例や、map (+10)のような部分適用が日常的に現れる場面を見て、curryとuncurryによるタプル版と通常版の変換も自分で試します。

  • ラムダ式とセクション — 名前のない関数を作る6:00

    \x -> x*xというラムダ構文と、(+1)や(/2)のように演算子の片側だけを埋めるセクション記法を学びます。filterに渡す述語をラムダで書く例、map (*2)のようにセクションで書く例を並べ、無名関数を使いすぎると読みにくくなる場面にも触れ、高階関数への引数をセクション形式に書き換える練習に取り組みます。

  • 関数合成と適用演算子 — (.) と ($)7:47

    関数を組み合わせる二つの基本道具、関数合成の(.)と適用演算子の($)を使いこなします。show . (*2)のようなパイプライン的な合成、putStrLn $ ...のように括弧を減らす($)の使い方を、ポイントフリースタイルへの第一歩として体験し、複数の関数をパイプラインにつなぐ練習やmapの中に合成関数を埋め込む練習で仕上げます。

  • 高階関数の入門 — map、filter、foldr6:06

    関数を引数として受け取る高階関数の代表格、map、filter、foldrを実際に動かします。整数リストを二乗するmap、偶数だけ抜き出すfilter、合計を計算するfoldrを順に書き、それぞれの型シグネチャを見比べて「畳み込み」という概念に親しんだうえで、map・filter・foldrを連携させる三段コンボの練習をします。

  • 再帰の作法 — 基底ケースと再帰ケース6:39

    ループ構文を持たないHaskellで反復を表現する唯一の手段、再帰を身につけます。伝統的なfactorialとlengthの実装を通じて、基底ケースと再帰ケースの分け方、累積引数を使った末尾再帰風の書き方、リスト走査の典型パターンを学び、最後に二つのリストを再帰だけで連結するmyAppend関数を書き上げます。

  • GHCとツール生態系 — Cabal、Stack、Hackage、Stackageの地図3:40

    Haskellを実際に使うときに避けて通れない周辺ツール群の地図を手に入れます。デファクト標準のコンパイラGHC、依存解決を担うCabalと再現性重視のStackの違い、パッケージ集積地Hackageと安定スナップショットを提供するStackageの関係、HLSによる現代的なエディタ体験、そしてghciによる対話的開発の役割が、一枚のコンポーネント図として整理されて見えてきます。

  • リストの作り方と分解 — [], (:), head, tail6:26

    同じ型の要素を並べるHaskellの基本コンテナ、リストを、コンス演算子(:)、空リスト[]、リテラル[1,2,3]という三つの顔から学びます。head、tail、null、lengthによる基本操作と、それらが空リストでどう壊れるかを確認し、最後に空でも安全に最初の要素を取り出すsafeHead関数を書いてみます。

  • リスト内包表記 — [x*2 | x <- xs, even x] の読み方3:55

    数学の集合の内包的記法に似たリスト内包表記を読み書きできるようになります。ジェネレータ、フィルタ、複数ジェネレータの直積、ピタゴラス数の列挙といった典型例を順に書き、map+filterの組み合わせと等価であることを比較で確かめたうえで、九九の表をリスト内包表記で生成する練習に挑みます。

  • 無限リストと遅延評価 — take, takeWhile, iterate6:01

    遅延評価のおかげで無限の長さのリストを定義しても破綻しない、Haskellならではの体験をします。[1..]やiterate (*2) 10、repeat、cycleといった無限ストリームから、take 5やtakeWhile (<100)で必要なだけ取り出すコードを書き、最後に独自の増加関数をiterateで回し、takeWhileで上限まで取り出す練習をします。

  • タプル — 異なる型を束ねる短い詰め合わせ7:53

    長さと型が固定された異種コンテナ、タプルを、(String, Int)や三つ組(x,y,z)から学びます。fst、snd、パターンマッチによる分解、zipによるペア化、unzipによる分離を実際に動かし、リストとの使い分け(長さが可変かどうか)を押さえたうえで、商品名と価格のペアのリストから合計を求める練習に取り組みます。

  • 文字列の正体 — [Char] としての String6:00

    HaskellのStringがChar型のリストにすぎないという事実を起点に、文字列操作をリスト操作として行います。wordsとunwords、linesとunlines、reverse、mapとtoUpperで全部大文字に変換するといった操作を実演し、効率を求める場面でのText型の存在にも触れ、最後にこれらを全部組み合わせるコンボを書きます。

  • 採用事例とベンチマーク — どこでHaskellは戦っているか3:37

    Haskellが実際に本番投入されている領域を、企業事例とパフォーマンス指標から俯瞰します。業界別の主な採用事例、Haskellが特に光る領域トップ3、ベンチマーク上のおおまかな位置づけ、開発者調査での満足度と利用率の乖離、求人市場での希少性など、Haskellの「戦場」が立体的に見えてきます。

  • 型シノニム — type Name = String の使いどころ6:19

    既存の型に別名を与えるtypeキーワードを使いこなします。type Name = String、type Level = Intのような定義で関数シグネチャの可読性を上げるテクニックを学び、タプルやリストにも別名をつける書き方、newtypeやdataとの違いを「ただの別名」という一点で押さえたうえで、クエストログのような構造を型シノニムで設計してみます。

  • 代数的データ型の基本 — Shapeで学ぶ和と積8:31

    Haskellの核となる代数的データ型を、CircleとRectangleを持つShape型から学びます。複数のデータコンストラクタによる「和」、各コンストラクタが引数を取ることによる「積」を理解し、パターンマッチで面積を計算するarea関数を書き、最後にTriangleコンストラクタを追加してareaを拡張する練習に取り組みます。

  • レコード構文 — フィールド名つきのデータ型5:21

    data Hero = Hero { heroName :: String, heroHp :: Int, heroLvl :: Int }のようなレコード構文を扱います。自動生成されるアクセサ関数、フィールドを指定するレコード更新構文によるレベルアップ、コンストラクタ位置記法との比較を実演し、最後にBook型をレコード構文で定義して各フィールドを取得する練習をします。

  • MaybeとEither — 失敗を型で表現する6:21

    例外に頼らず失敗を値として返す定番、Maybe型とEither型を学びます。safeDivがMaybe Doubleを返す例、parseNumberがEither String Intを返す例を書き、パターンマッチで結果を取り出す書き方を確認し、最後にリストから安全にn番目を取得するsafeIndex関数を書き上げます。

  • newtype — 一引数だけのゼロコスト包み紙6:56

    dataに似ているがコンストラクタを一つだけ持つnewtypeを学びます。newtype HeroLevel = HeroLevel Intのような定義で型安全性をタダで手に入れる例、コンパイル後はランタイム表現が同じになる性質、deriving Showの併用、包みを開けて中身を取り出す書き方を実演し、最後にMeterとSecondを別の型として区別する練習をします。

  • 関数型パラダイムの比較地図 — Haskell、OCaml、Scala、Rust、Elm2:13

    Haskellを単独でではなく、近隣の言語との比較によってその独自性を浮かび上がらせます。同じML系のOCaml、JVM上で関数型とオブジェクト指向を融合するScala、所有権で別種の安全性を実現するRust、Web専用に純度を保つElmと並べ、評価戦略、型システムの表現力、副作用の扱い、実行モデル、コミュニティ規模という軸で比較し、なぜHaskellが「関数型の参照実装」と呼ばれるのかが分かります。

  • 多相型の力 — 型変数とパラメトリック多相5:16

    id :: a -> aやlength :: [a] -> Intのような型変数を含む関数を題材に、Haskellのパラメトリック多相を学びます。型変数aがあらゆる型を受け入れるという制約と、それゆえに関数本体でできることが極端に限られる「パラメトリシティ」の性質を実感し、二つの型変数を入れ替えるswapPairや、自前のmaybeMap関数を多相型で書いてみます。

  • 型クラスを自作する — class と instance7:51

    既存のEqやShowに頼るだけでなく、独自の型クラスを定義します。class Describable a where describe :: a -> Stringを宣言し、HeroやSpellに対するinstance宣言を書き、デフォルト実装の与え方やインスタンスの孤児への注意も学んだうえで、パーティ全員を一斉に紹介する総合演習に取り組みます。

  • deriving — Eq、Ord、Show、Readを自動で得る10:23

    独自データ型にderiving (Show, Eq, Ord)と書くだけで、表示、等価判定、順序比較が手に入る便利機能を学びます。deriving Readで文字列から型を呼び戻す例、Ordがコンストラクタの宣言順に依存する事実、newtypeでのゼロコストな派生も押さえ、最後に自作のColor型をderiving Ordでソートして並べます。

  • 制約付き多相 — (Eq a, Show a) => の読み方7:48

    関数の型に=>記号を伴う制約が付いている形を、quickSortやshowに依存する関数といった実例で読み解きます。Eqインスタンスを要求する所属判定、Ordインスタンスを必要とするソート、Showインスタンスを要求する汎用表示関数を実装し、複数制約を一つの関数に課す書き方も学んだうえで、Fractional制約付きの平均関数を自分で書きます。

  • 型クラスの階層 — Functor、Applicative、Monadの地図3:16

    Haskellの抽象化体系の中心にある型クラス階層を、コードを書かずに継承関係の図として理解します。Functorのfmap、Applicativeのpureと(<*>)、Monadの(>>=)とreturnがどう積み重なっているか、それぞれが満たすべき法則、そしてなぜこの順序で導入されるべきかが見え、後のコード学習に備えた抽象的な土台ができます。

  • do記法とIOモナド — 副作用を型で隔離する5:14

    main :: IO ()の世界でgetLineとputStrLnをdoブロックでつなぐ書き方を、対話的なプログラムを通じて学びます。<-による束縛、letとの違い、IO Stringの値が文字列そのものではないこと、(>>=)で書き換えた等価な姿も確認し、最後に名前と攻撃力を聞いて必殺技を計算する対話プログラムを書き上げます。

  • Maybeモナドで失敗を連鎖させる8:09

    連続してMaybeを返す処理を、case式で書いた階段状コードと、do記法でフラットに書いたモナドコードで比較します。lookup関数を使った辞書引き連鎖、(>>=)で同じことを書く形、途中で失敗した瞬間にNothingが伝播する挙動を観察し、最後にユーザIDからメール、メールから組織名を引く関数を書きます。

  • 例外と Either — エラーを値として運ぶ7:58

    Either String aを返す関数を組み合わせ、失敗理由をメッセージとして引き回すパターンを学びます。parseInt、divideSafe、validateAgeのような関数を作り、do記法でEitherをモナドとして連結し、Left側に詳しい原因を載せる流儀を実演したうえで、文字列から整数をパースして二倍する関数チェーンを書きます。

  • 並行プログラミング入門 — forkIOとMVar7:54

    Control.ConcurrentのforkIOで軽量スレッドを生成し、MVarで安全に値を共有するスタイルを学びます。スレッドを起動する例、threadDelayで時間をずらす例、共有カウンタをMVarで安全に更新する様子を出力で観察し、最後に二つのスレッドで「ping/pong」を交互に出力するプログラムを書きます。

  • async と STM — 高水準な並行性6:31

    asyncライブラリのconcurrentlyとmapConcurrently、そしてSoftware Transactional Memory(STM)のTVarとatomicallyを学びます。二つの処理を並行に走らせる例、STMで口座間の送金をアトミックに行う例を書き、ロックレスな並行プログラミングの感触をつかみ、mapConcurrentlyで複数の計算を並列化する練習に取り組みます。

  • 遅延ストリームとリソース管理 — bracketとwithFile5:40

    ファイルのような外部リソースを安全に扱う定番、bracketとwithFileを学びます。例外が起きてもクローズ処理が必ず走るbracketの三引数(取得・解放・本体)構造、withFileによるイディオマティックなファイル読み書きを実演し、遅延I/Oの罠にも触れたうえで、最後にテキストファイルの行数を数えるプログラムをwithFileで書きます。

  • モナドの直観 — 「文脈付き計算」を貫く一本の糸3:35

    初学者を最も悩ませる「モナドとは何か」という問いに、概念図とアナロジーだけで答えます。Maybeの失敗文脈、Listの非決定性文脈、IOの世界とのやりとり、Stateの暗黙の状態という四つの代表モナドを並べ、それぞれが「次の計算につなぐ」共通の構造を持っていることが視覚的に見え、do記法がただの糖衣であることも腑に落ちます。

  • GHCの裏側 — Coreへの脱糖と遅延評価の実装3:11

    Haskellソースが機械語にたどり着くまでの旅路を、コンパイラパイプラインとしてたどります。表層構文からCore、STG、Cmm、機械語へと段階的に脱糖されていく流れ、サンクとして表現された遅延計算がヒープ上にどう置かれるか、ガベージコレクタとの関係、そして「書いたコードと走るコードはまるで別物」と言われる理由が、層構造の図で見えてきます。

  • スペースリークと正格性 — 美しさが牙を剥くとき3:03

    遅延評価が引き起こす代表的な落とし穴、スペースリークを概念的に理解します。foldlを使った合計計算がO(1)ではなくO(n)のメモリを食う仕組みをサンクの蓄積として図で見て、BangPatternsやseq、deepseq、foldl'といった処方箋の位置づけを比較で整理し、「いつ正格性を入れるべきか」の判断基準が手に入ります。

  • 関数型デザインパターン — 純粋世界の定石集3:04

    オブジェクト指向のGoFパターンに相当する、関数型コミュニティで共有されているデザインパターンを概念的に俯瞰します。スマートコンストラクタ、Reader/Writer/Stateのモナド分割、Free Monad、Tagless Finalといったテクニックを抽象化レベル別に眺め、それぞれが解決する設計上の問題と一緒に整理することで、初学者には地図として、経験者には選択肢として使える一覧が得られます。

  • Haskellの応用領域 — コンパイラ、金融、DSL、形式手法3:27

    Haskellが特に光る応用分野を、各領域の代表的プロダクトとともに俯瞰します。コンパイラとインタプリタ実装、金融分野のリスク計算と取引DSL、ブロックチェーン、定理証明と隣接する形式手法、Webバックエンド、データパイプラインを取り上げ、なぜそれぞれの領域でHaskellの強みが噛み合うのか、導入を検討するときの優先順位は何かが見えてきます。

Requirements

  • いずれかのプログラミング言語での基本的な開発経験(変数、関数、制御構造)
  • コマンドラインでのファイル操作とプログラム実行ができること
  • テキストエディタまたはIDEでソースコードを編集できる環境
  • 抽象的な概念や数学的な記法に粘り強く向き合う知的体力
  • GHCとghciをローカルにインストールできるPC(Windows/macOS/Linux)

Description

This course contains the use of artificial intelligence.

関数型プログラミングは、もはやアカデミアの実験ではありません。金融、コンパイラ、形式手法、DSL設計といった「絶対に間違えられない」領域で、Haskellは静かに、しかし確実に採用を広げてきました。純粋性、強い型付け、遅延評価という三つの柱は、バグの多くをコンパイル時に弾き飛ばし、保守性の高いコードを生み出します。AIが大量のコードを書く時代だからこそ、「壊れにくい設計」を型で表現できる能力は、これまで以上に希少な武器になります。本コースは、その武器をあなたの手に渡すために設計されました。

本コースは、Haskellの全体像を歴史と思想から実装の細部まで案内します。学び方には一貫した流れがあります。各コーディングセクションは、まずそのテーマの背景・歴史・「なぜそう設計されたのか」を語る短い概念講義で幕を開け、その直後に手を動かすハンズオンの実装講義が続きます。こうしてHaskell誕生の物語、設計哲学、弱点と批判、ツール生態系、採用事例、関数型言語の比較地図といった「文脈」を要所要所で押さえながら、ghciでの最初の一歩、let/where、基本型、型注釈、パターンマッチ、ガード、case式、関数の第一級性、カリー化、高階関数、再帰、リスト内包表記、無限リスト、タプル、文字列、独自型(data/type/newtype)、Maybe/Either、そして型クラスの自作、deriving、制約付き多相、do記法とIO、エラー処理、forkIO/MVar、async/STM、bracketによるリソース管理までを、概念とコードを交互に織り上げながら積み上げていきます。そしてコースの締めくくりには、モナドの直観、GHC Coreと遅延評価の実装、スペースリークと正格性、関数型デザインパターン、応用領域といった、より深い概念講義をまとめて配置し、それまで書いてきたコードの裏側にある原理を一本の糸で貫きます。

対象は、他言語の経験を持ち関数型パラダイムに本気で踏み込みたいエンジニア、型システムを武器にしたい設計者、CSの理論的基盤を実装で確かめたい学生・研究者です。前提は、いずれかの言語での基本的なプログラミング経験、コマンドラインの操作、テキストエディタの使用、そして抽象概念を粘り強く追う知的体力です。修了時には、Haskellで小〜中規模のプログラムを設計・実装し、型でドメインを表現し、モナドで副作用を制御し、並行プログラムを安全に書けるようになります。

類書との違いは、構文の羅列ではなく「なぜそう設計されたのか」を歴史・哲学・実装の三層で語り抜く点にあります。Haskellの弱点や採用障壁も正面から扱い、現実の選択肢として評価できる目を養います。コードを書くだけでなく、関数型の思考そのものを身につけたいなら、今すぐ受講を始めてください。

Who this course is for:

  • 他言語の経験を持ち、純粋関数型パラダイムに本格的に踏み込みたいエンジニア
  • 型システムを武器にして堅牢なドメインモデルを設計したいアーキテクト
  • OCaml、Scala、Rust、Elmの経験者で、Haskellを比較軸として学びたい開発者
  • 計算機科学の理論的基盤を実装を通して体感したい学生・研究者
  • 金融、コンパイラ、形式手法、DSL領域でHaskellの採用を検討している技術者