Hamcat
ドキュメントは以下で公開されています! → https://criceta.com/category-theory-with-scala/
Hamcat は、圏論に関する概念を実装した勉強用ライブラリです。
ライブラリの名前は、著者がハムスターが好きなのと、Homology と、Category Theory とを掛けて考えました。
ディレクトリ構成
本プロジェクトは以下のディレクトリ構成を持ちます。
- core/src/main/scala/ : 圏論の概念のコード群
- arrow/ : 射のラッパークラスを定義したパッケージ
- data/ : データ構造を定義したパッケージ
- instance/ : データ構造のインスタンスを定義したパッケージ
- syntax/ : データ構造の文法を定義したパッケージ
- docs/src/main : ドキュメント群
- example/src/main/scala/ : サンプルコード群
使い方
本プロジェクトをクローンして、ローカル環境にてお使いください。
% git clone git@github.com:taretmch/hamcat.git --init
% sbt
sbt:hamcat> core/console
[info] Starting scala interpreter...
Welcome to Scala 2.13.3 (Java HotSpot(TM) 64-Bit Server VM, Java 10.0.1).
Type in expressions for evaluation. Or try :help.
scala> import hamcat.Implicits._
import hamcat.Implicits._
scala> Option("abcdefg") |+| Option("hijklmn")
val res0: Option[String] = Some(abcdefghijklmn)
scala> def isEven: Int => Boolean = _ % 2 == 0
def isEven: Int => Boolean
scala> def negate: Boolean => Boolean = b => !b
def negate: Boolean => Boolean
scala> def isOdd = isEven.fmap(negate)
def isOdd: Int => Boolean
scala> isOdd(3)
val res1: Boolean = true
scala> def isLengthEven: String => Boolean = isEven.contramap(_.length)
def isLengthEven: String => Boolean
scala> isLengthEven("abcdefg")
val res3: Boolean = false
資料の更新について
ドキュメントは scalameta/mdoc を使って書かれています。編集する場合、可能であれば mdoc を使っていただければと思います。
ドキュメントは HonKit を使って静的サイトにしています。ローカルでの静的サイトを確認するには、npm パッケージをインストールする必要があります。
% npm install
# or
% yarn install
以下のコマンドを実行したあと
% sbt docs/textBuildHtml
honkit/docs/index.html
で確認できます。textBuildHtml
は、mdoc を実行後 HonKit でビルドするコマンドです。
ライセンス
Category Theory for Programmers - Scala Edition のコピーレフトを継承し、GPL-3.0 ライセンスの下公開しています。
免責事項
本プロジェクトは、Bartosz Milewski 氏著 Category Theory for Programmers - Scala Edition を翻訳し、読みながら作成した勉強記録です。
ドキュメントの章構成は基本的に原文に則っていますが、省略している箇所もあります。なお、非公式な翻訳であり、個人的な解釈を含む表現もあるため、閲覧の際はそれらの点に留意してお読みください。
内容や表現が間違っている箇所、修正した方が良い箇所、修正すればよりわかりやすくなる箇所等ありましたら、プルリクエストにてご提案いただけると助かります。