- 関数型プログラミング(言語)の愛好者/実践者
- 関数型まつり2026の運営スタッフ(座長のひとり)
- 主に(CfPを含む)メインコンテンツの準備を担当
- 株式会社スマートラウンドのシニアエンジニア
- スタートアップと投資家のやり取りを効率化するデータ管理プラットフォームを開発
- ソフトウェア設計/開発とともに会計/財務/法務について探求するのも好き
-
きっかけ
-
書籍 FP in Scala とは
-
Flix言語の基本
-
(純粋)関数型のコード設計
- 関数型プログラミング入門
- 関数型の設計とコンビネータライブラリ
- 関数型の設計に共通する構造
- エフェクトとI/O
;; TODO
- cf. 関数型まつり2025の🐬の発表ではHaskell, Scala, Clojure, Elixirの4言語で関数型プログラミングに関わる基本的な仕組みを概観した
- 関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
- 今年度の発表では関数型プログラミングらしいコード設計/抽象化のパターンにより踏み込んで解説したいと考えていた
- 関数型プログラミング(言語)について学んでいく過程で取り組んだ本のひとつにちょうどFP in Scalaがあった(読みかけで積んでいたが😇)
- 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
- ClojurianなのでRich Hickeyのプレゼン"Simple Made Easy"の趣旨を理解したうえで主要な設計指針として位置付けているところにも感激した
Functional Programming in Scala, Second Edition
Manningの書籍詳細ページより『Scala関数型デザイン&プログラミング』
※ Functional Programming in Scala (第1版)の訳書
端的にいえば、オブジェクト指向関数型言語Scalaで(純粋関数型言語Haskellのようなスタイルの)純粋関数型プログラミング実践を目指す本
FP in Scalaの登場背景: Scalaは確かに関数型言語だが、言語レベルでpure/impureを区別する仕組みはなく、(少なくともこの本の初版が書かれた2014年当時には)命令型プログラミングに寄ったScalaコードが書かれる(あくまで"better Java"として使われる(?))ことも珍しくなく、Scalaプログラマが純粋関数型プログラミングに親しむには例えばHaskellを学ぶ必要があった。
豊富な演習問題(exercises)に自ら取り組むことで理解を深めることを重視した構成になっている。
公式リポジトリfpinscalaには
- 演習問題/ヒント/解答例/テストコード
- Wiki: 追加の解説/チャプターノート
- (内容的に関係が深い) Haskell言語の概説も: https://github.com/fpinscala/fpinscala/wiki/A-brief-introduction-to-Haskell,-and-why-it-matters
今回の関数型まつり2026のDay 1で行われる「FP入門ハンズオン」の題材でもあり、Scala以外の(関数型)言語でも取り組んでみると、同じ純粋関数型プログラミング実践にも言語による個性が必然的に生じてくる
- cf.
- 「関数型まつり」によるリポジトリ: fp-matsuri/fp-in-scala-exercises
- 🐬の学習用リポジトリ(Scala, Clojure, Flix): lagenorhynque/fp-in-scala
;; TODO
シンタックスはScalaにわりと似ていて、処理系の実装言語もScalaだが、主要な言語機能はHaskellに近い印象
主に関数型言語経験者向けの補足:
- 非オブジェクト指向の関数型言語
- サブタイピング(サブタイプ多相)/継承も変性(variance)もない
- サブタイピングはそもそも型推論の仕組みと相性が良くない
- 🐬< OOPLがFPをサポートしようとする一方でFPLがOOPを積極的にサポートしようとしない一因といえそう
- サブタイピング(サブタイプ多相)/継承も変性(variance)もない
- Hindley-Milner型システム/型推論が採用されている
- ML系言語(Standard ML, OCaml, F#, etc.)も同様
- 関数は常にカリー化される(i.e. 多引数関数に見えても実体は1引数関数の連鎖)
- ML系言語(Standard ML, OCaml, F#, etc.)も同様
- Scalaでは複数パラメータリスト構文やcurriedメソッドなどで手動でカリー化する
- 型クラス(type class)というHaskellでお馴染み(?)の機能がある
traitというキーワードが使われるが、Scalaのtraitとは名前が同じだけ(むしろRustのtraitに命名を寄せた様子)
;; TODO
;; TODO


