3 に答える
Scalaz がほとんど文書化されていないことに同意します。問題は、Haskell (および基礎となる数学) から多くの高度な概念を収集し、それらをすべて詳細に文書化すると、関数型プログラミング (および数学) に関する本全体を書くことになることです。したがって、Scalaz のアプローチは次のようになると思います。
- Scala 用に準備された関数型プログラミングの概念を知っていて、それが必要な場合は、おそらくここで見つけることができます。
- わからないなら他で勉強すればいいのに。
あなたの例を見てみましょう: Kleisli カテゴリと、すべてのモナドがどのようにカテゴリを生成するかを知っている場合、定義は完全に自己完結型です。そうしないと、KleisliCategory
とにかく役に立ちません。
(私の経験では、関数型プログラミングから高度な概念を学ぶには Haskell の方が適しています。Scala は Java よりもはるかに優れていますが、Java の OO/命令型の遺産を引きずっているため、少し雑然としています。)
Unicode 記号を考慮します。ソースを見ると、それらはシンタックス シュガーとしてのみ使用されているか、少なくとも非 Unicode 対応のものがあるようです。
def ☆[M[_], A, B](f: A => M[B]): Kleisli[M, A, B] = kleisli(f)
def η[F[_]](implicit p: Pure[F]): F[A] = pure
def cokleisli[W[_], A, B](f: W[A] => B): Cokleisli[W, A, B] = ★(f)
したがって、必要に応じて、それらなしで行くことができます。
それでも、Scalaz でそれらを使用することが良いアイデアかどうかはわかりません。適切なフォントがない人にとっては、コードが読めなくなる可能性があります。私はむしろ純粋な ASCII シンボルを好みます。
開始する場所は、多くの概念をカバーする Haskell の学習を読むことです。
Chris Marshall (@oxbow_lakes) の scalaz トークを見る: http://skillsmatter.com/expert/scala/chris-marshall
何人かの scalaz の作者によって書かれた Manning から、Functional Programming in Scala のコピーを入手してください。
私のブログhttp://www.casualmiracles.com/blog/にいくつかの小さな例があります。
バリデーションよりも scalaz から始める方が簡単な場所があると思います。これは、オプションに含まれる値を返す ~foo や、オプションの型 (数値の場合は 0、文字列など)。
Learning Scalaz ( http://eed3si9n.com/ ) という非常に詳細な一連の記事を忘れていました。
他のオープンソース プロジェクトと同様に、「なぜ彼らのドキュメントは優れていないのか?」に対する真に受け入れられる唯一の答えは、は「まだ誰も書いていないからです。志願するのは自由です」です。
(正直なところ、この回答が賛成票と反対票のどちらになるかはわかりません。興味深い実験です。)