Skip to content

Instantly share code, notes, and snippets.

@lagenorhynque
Last active May 25, 2026 07:22
Show Gist options
  • Select an option

  • Save lagenorhynque/cac12828101d2b45f03100c75860d62a to your computer and use it in GitHub Desktop.

Select an option

Save lagenorhynque/cac12828101d2b45f03100c75860d62a to your computer and use it in GitHub Desktop.
速習FP in Scala with Flix: Flix言語で親しむ純粋関数型のコード設計
slides:
charset: utf-8
theme: night
highlight_theme: monokai-sublime
separator_vertical: ^\s*----\s*$
revealjs:
transition: convex
plugins:
- extra_css:
- https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css

速習FP in Scala with Flix

Flix言語で親しむ純粋関数型のコード設計


x icon

  • 関数型プログラミング(言語)の愛好者/実践者
  • 関数型まつり2026の運営スタッフ(座長のひとり)
    • 主に(CfPを含む)メインコンテンツの準備を担当
  • 株式会社スマートラウンドのシニアエンジニア
    • スタートアップと投資家のやり取りを効率化するデータ管理プラットフォームを開発
    • ソフトウェア設計/開発とともに会計/財務/法務について探求するのも好き

  1. きっかけ

  2. 書籍 FP in Scala とは

  3. Flix言語の基本

  4. (純粋)関数型のコード設計

    1. 関数型プログラミング入門
    2. 関数型の設計とコンビネータライブラリ
    3. 関数型の設計に共通する構造
    4. エフェクトとI/O

1. きっかけ


;; TODO

  • cf. 関数型まつり2025の🐬の発表ではHaskell, Scala, Clojure, Elixirの4言語で関数型プログラミングに関わる基本的な仕組みを概観した
  • effect systemとalgebraic effestsについて探る過程で偶然出会った言語Flix
    • ClojurianなのでRich Hickeyのプレゼン"Simple Made Easy"の趣旨を理解したうえで主要な設計指針として位置付けているところにも感激した
      • 本質的には、simplicityとは対象/客体(object)・モノの構造の問題、easeとは主体(subject)・ヒトの対象との関わり方(学習/経験や環境など)の問題といえる
      • さらに抽象化すれば、「モノへの投資とヒトへの投資を区別すべし。ヒトが移り変わっても残るモノには最初に意識的に投資せよ。」のような示唆を見出すことさえできる
        • ars longa, vita brevis (ὁ βίος βραχύς, ἡ δὲ τέχνη μακρή): 技芸は長く、人生は短い
    • cf. Zenn記事: Clojurianが出会ったsimple志向なJVM関数型言語Flix ——ファーストインプレッション
    • cf. listmeeptup発表: "Simple Made Easy" Made Easier

2. 書籍 FP in Scala とは


Functional Programming in Scala, Second Edition

fp in scala (original)

Manningの書籍詳細ページより

『Scala関数型デザイン&プログラミング』
Functional Programming in Scala (第1版)の訳書

fp in scala (japanese)

インプレスブックスの書籍詳細ページより

端的にいえば、オブジェクト指向関数型言語Scalaで(純粋関数型言語Haskellのようなスタイルの)純粋関数型プログラミング実践を目指す本

FP in Scalaの登場背景: Scalaは確かに関数型言語だが、言語レベルでpure/impureを区別する仕組みはなく、(少なくともこの本の初版が書かれた2014年当時には)命令型プログラミングに寄ったScalaコードが書かれる(あくまで"better Java"として使われる(?))ことも珍しくなく、Scalaプログラマが純粋関数型プログラミングに親しむには例えばHaskellを学ぶ必要があった。

豊富な演習問題(exercises)に自ら取り組むことで理解を深めることを重視した構成になっている。

公式リポジトリfpinscalaには

今回の関数型まつり2026のDay 1で行われる「FP入門ハンズオン」の題材でもあり、Scala以外の(関数型)言語でも取り組んでみると、同じ純粋関数型プログラミング実践にも言語による個性が必然的に生じてくる


3. Flix言語の基本


;; TODO

シンタックスはScalaにわりと似ていて、処理系の実装言語もScalaだが、主要な言語機能はHaskellに近い印象

主に関数型言語経験者向けの補足:

  • 非オブジェクト指向の関数型言語
    • サブタイピング(サブタイプ多相)/継承も変性(variance)もない
      • サブタイピングはそもそも型推論の仕組みと相性が良くない
      • 🐬< OOPLがFPをサポートしようとする一方でFPLがOOPを積極的にサポートしようとしない一因といえそう
  • Hindley-Milner型システム/型推論が採用されている
    • ML系言語(Standard ML, OCaml, F#, etc.)も同様
  • 関数は常にカリー化される(i.e. 多引数関数に見えても実体は1引数関数の連鎖)
  • 型クラス(type class)というHaskellでお馴染み(?)の機能がある

4. (純粋)関数型のコード設計


;; TODO


Further Reading

;; TODO

#!/usr/bin/env bash
# pip install mkslides
open http://localhost:8000 \
&& mkslides serve *.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment