24

重複の可能性:
良い scalaz の紹介

私は Scalaz についてもっと学びたいと思っています。おそらく Scalaz7 を使用して、脳が安定していると宣言されたら、脳の再配線を避けたいと思っています。私の問題は、Scalaz に多くの機能が含まれていることです。そのほとんどは他の部分から独立していることを意図していますが、Scalaz が提供するグローバルな機能と、それがどのように構成されているかを俯瞰したいと思います。私の知る限り、Scalaz は、とりわけ、

  • FunctorApplicativeおよびMonad特性、
  • Validationのような新しいモナド
  • モナド変換子 ( OptionT, EitherT....)
  • Itereatees
  • Lensエス
  • Zippers

これに加えて、多くの暗黙的な変換someと、標準ライブラリと重複するが型に関してより適切に動作するような新しいコンストラクターがあります。

:type Some(3) // Some[Int]
:type some(3) // Option[Int]

私はこれらの構造のほとんどについて基本的な理解を持っていますが、どの概念についても流暢ではありません。

ライブラリを学習する順序、モジュール間に存在する論理的な依存関係について何か提案はありますか? より一般的には、ライブラリの高レベルの概要はどこにありますか?

編集ほとんどの回答は、モナドなどの関数型プログラミングの基本コンポーネントの学習に向けられているようです。そのため、より正確にしようと思います。私は Haskell の基本的な知識と数学者のバックグラウンドを持っているので、私の問題は圏論や基本的な関数型プログラミングとは関係ありません。

私の問題は、Scalaz が巨大なライブラリであることです。どこで何を見つければよいのか、さまざまなデータ型でどのメソッドが利用可能または有用なのかわかりません。私が本当に必要としているのは、たとえば、破棄する必要のあるリソースを繰り返し処理したい場合、反復対象とそれを使用して実行できる操作の種類を検討する必要があることを教えてくれるマップです。ライブラリで利用可能な機能のパノラマのようなものです。

4

4 に答える 4

11

Eugene Yokota による Scalaz 7の優れたシリーズLearning scalazをお勧めします。著者はLearn You a Haskell for Great Goodの構造に従っています。アプローチは体系的で非常に教育的です。

于 2012-09-12T13:12:04.107 に答える
9

私からのアドバイスは、ライブラリについて大まかな理解が得られるまで待たないことです。最初にいくつかのツールを選択し、概念的なリンクに従って進めてください。

Validation(ちなみに、これは実際には monad ではありません) は、おそらく開始するのに最適な場所です。Either標準ライブラリで検証に使用したことがある場合はValidation、なじみがあり、はるかに便利に感じるでしょう。ここStackOverflow他の場所Validationの両方で多くの有用な議論を見つけることができます。

作業に慣れたらValidation、他の多くのコンテキストで役立つアプリカティブ ファンクター型クラスの基本を十分に理解する必要があります。

Monoid別の良い出発点です。これは非常に単純な型クラス (基本的には、連想加算のような演算と恒等要素にすぎません) であり、一度理解すると、いたるところにモノイドが表示されます。たとえば、最初はあまりモノイドに見えない問題を解決するためにモノイドを使用する方法を示すこの回答(完全な開示:それは私によるものです)を参照してください。

Scalaz には、全体像を把握しなくても使用できる便利な小さなツールが他にもたくさんあります。Bifunctorは私のお気に入りの 1 つです。どちらの側にも関数をマップする方法を提供することで、タプルの操作がはるかに便利になります。

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def inc(i: Int) = i + 1
inc: (i: Int)Int

scala> def repeat(n: Int)(s: String) = s * n
repeat: (n: Int)(s: String)String

scala> (inc(_)) <-: (1, "a") :-> repeat(3)
res0: (Int, String) = (2,aaa)

これらの概念のいくつかを十分に理解したら、Brent Yorgey のTypeclassopediaをお勧めします。これは Haskell 指向ですが、ほとんどのことを理解するのに十分な圏論と抽象代数を提供する素晴らしい仕事をしています。 Scalaz で見つけることができます。

于 2012-09-12T13:18:54.467 に答える
6

私が役に立つと思ったビデオのいくつか:

これらのほとんどには素晴らしいスライドがあります。筋金入りの場合は、ビデオなしで読んでください。

また、Haskellの型シグネチャの読み方学び、 Haskell の typeclassopediaを参照してください。

于 2012-09-12T13:14:01.437 に答える
5

私は Haskell のチュートリアルから誰も引き離すつもりはありませんが、もしあなたが OOP スタイルの開発者であり、関数型の世界に住みたいと思う理由に慣れていない場合、少し気が遠くなるかもしれません.

memoization (Memo in scalaz) や domain validation (Validation in scalaz) など、誰もが知っている例を使って scalaz にアプローチする "scalaz For the Rest of Us" という講演を行いました。そして、scalaz の力を使ってよく知られた問題を解決する方法を学び始めることができます。

于 2012-09-12T19:31:53.027 に答える