Подтвердить что ты не робот

Поиск моего пути через Scalaз

Возможный дубликат:
Хорошее представление о скасазе

Я хотел бы узнать больше о Scalaz, возможно, используя Scalaz7, чтобы избежать переналадки моего мозга, как только он будет объявлен стабильным. Моя проблема в том, что Scalaz содержит много функциональности. Хотя большинство из них должно быть независимым от других частей, я хотел бы взглянуть на птицу на глобальную функциональность, предлагаемую Scalaz, и как она организована. Насколько мне известно, Scalaz предлагает, помимо прочего,

  • Functor, Applicative и Monad,
  • новые монады, такие как Validation (править: оказывается, это всего лишь аппликативный)
  • monad transformers (OptionT, EitherT....)
  • Itereatee s
  • Lens эс
  • Zipper s

К этому добавляется много неявных преобразований, а новые конструкторы, такие как some, которые перекрываются со стандартной библиотекой, но ведут себя лучше в отношении типов

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

У меня есть основное понимание большинства из этих конструкций, но я не понимаю каких-либо понятий.

Есть ли у вас какое-либо предложение в каком порядке узнать библиотеку, какие логические зависимости существуют между модулями? В более общем плане, где я могу найти обзор библиотеки на высоком уровне?

EDIT Кажется, что большинство ответов направлено на изучение основных компонентов функционального программирования, таких как монады, поэтому я постараюсь быть более точным. У меня есть базовые знания о Haskell и математике, поэтому моя проблема не связана с теорией категорий или базовым функциональным программированием.

Моя проблема в том, что Scalaz - огромная библиотека. Я не знаю, что можно найти, какие методы доступны или полезны для разных типов данных. Мне действительно нужна карта, которая, например, скажет мне, что когда я хочу перебирать ресурсы, которые нужно удалять, я могу рассмотреть итерации и какие операции я могу с этим сделать. Это больше похоже на обзор возможностей, доступных в библиотеке.

4b9b3361

Ответ 2

Мой совет будет не ждать, пока вы не почувствуете, что у вас есть понимание уровня библиотеки на высоком уровне - просто выберите несколько инструментов, чтобы начать с них, а затем следуйте концептуальным ссылкам по ходу дела.

Validation (который, кстати, на самом деле не является монадой), вероятно, единственное лучшее место для начала. Если вы использовали Either для проверки в стандартной библиотеке, Validation будет чувствовать себя знакомым и гораздо более удобным. Вы найдете много полезных обсуждений Validation как здесь на fooobar.com/questions/94662/... и в другом месте.

Как только вам будет удобно работать с Validation, вы должны хорошо понимать класс типа прикладного функтора, который полезен во многих других контекстах.

Monoid - еще одна хорошая отправная точка. Это очень простой класс типа (по сути, просто ассоциативная операция с добавлением и элемент идентификации), и как только вы это поймете, вы увидите моноиды повсюду. См. Например этот ответ (полное раскрытие: оно мной), показывающее, как использовать моноиды для решения проблемы, которая изначально не выглядела бы очень моноидно.

В Scalaz есть много других удобных инструментов, которые вы можете использовать без необходимости захватывать всю общую картину. Bifunctor является одним из моих фаворитов - он делает работу с кортежа намного более удобной, предоставляя вам способ сопоставить функцию по обе стороны:

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.

Ответ 3

Некоторые из видео, которые я нашел полезными:

Большинство из них имеют большие слайды, если вы хардкор, тогда читайте их без видео.

Также learn в читать подписки типа Haskell и просмотрите Haskell typeclassopedia.

Ответ 4

Пока я никого не отворачивал от учебников Haskell, они могут быть немного ошеломляющими, если вы разработчик в стиле ООП и не знакомы с тем, почему вы когда-либо хотели жить в функциональном мире.

Я поговорил под названием "scalaz для остальной части нас", который подходит к скалязу, хотя примеры, с которыми все знакомы: memoization (Memo in scalaz), проверка домена (валидация в scalaz) и т.д. Таким образом, "прецедент" "ясно и может начать изучать, как решать знакомые проблемы, используя силу scalaz.