Нахожу свой путь через Scalaz

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

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

  • Functor, Applicative и Monad черты,
  • новые монады, такие как Validation (редактировать: оказывается, это только аппликатив)
  • преобразователи монад (OptionT, EitherT....)
  • Itereatees
  • Lenses
  • Zippers

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

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

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

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

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

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


person Andrea    schedule 12.09.2012    source источник
comment
аналогичный вопрос: stackoverflow.com/questions/4863671/good-scalaz-introduction   -  person Sergey Weiss    schedule 12.09.2012
comment
Просто замечание: Validation — это не монада, а just Applicative Functor (в scalaz7 у него даже нет flatMap)   -  person ron    schedule 12.09.2012


Ответы (4)


Я бы порекомендовал отличную серию статей Learning scalaz Юджина Йокоты о Scalaz 7. Автор следует Структура Изучайте Haskell во благо. Подход системный и очень педагогический.

person paradigmatic    schedule 12.09.2012
comment
Серия кажется довольно простой, охватывая только стандартные монады. Я ищу что-то, что даст более подробный обзор того, что я могу найти внутри Scalaz. Я прочитал книгу «Изучай Haskell», и она не затрагивает более сложные темы, такие как линзы, тройки Кизли или итерации, поэтому я не думаю, что эта серия охватит значительную часть библиотеки. - person Andrea; 12.09.2012
comment
Я вчера пролистал книгу. Я думал о том, чтобы осветить такие темы, как линзы и итерации позже. Присылайте мне комментарии или твиты, чтобы сообщить мне, что вы хотите, чтобы я узнал! - person Eugene Yokota; 12.09.2012
comment
@EugeneYokota Мне трудно найти правильный импорт в Scalaz 7 (кроме случаев, когда я импортирую все). Не могли бы вы добавить что-нибудь о минимальном импорте? - person paradigmatic; 12.09.2012
comment
@EugeneYokota Спасибо, что нашли время оставить комментарий! У меня нет особого желания что-то прикрывать; Я просто волновался, потому что неправильно понял серию и думал, что она закончится вместе с книгой, тем самым оставив большую часть Скалаз неисследованной. - person Andrea; 13.09.2012
comment
Между прочим, с течением времени это становится все более и более отличным ресурсом для погружения в Scalaz! - person Andrea; 25.09.2012
comment
День 13 посвящен @paradigmatic - eed3si9n.com/learning-scalaz-day13 - person Eugene Yokota; 27.09.2012
comment
@EugeneYokota Спасибо !!! - person paradigmatic; 27.09.2012

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

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

Как только вы освоитесь с 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)

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

person Travis Brown    schedule 12.09.2012
comment
Я довольно хорошо знаю теорию категорий и абстрактную алгебру (у меня есть опыт исследователя в области алгебраической геометрии), так что это не моя проблема. Я также знаком с монадами, функторами и так далее в контексте функционального программирования. Моя проблема больше связана с программированием. Например, скажем, я хочу узнать о проверке. Куда мне его импортировать? Какие методы мне будут доступны? И так далее. Конечно, я могу читать исходники или использовать инспекцию в оболочке, но было бы полезно иметь что-то вроде карты того, что и где доступно. - person Andrea; 12.09.2012
comment
Извините, ваш фон не был ясен из вопроса. В этом случае копание в исходнике, вероятно, будет вашим лучшим выбором — его не так много, и это достаточно ясно, как только вы выберете несколько соглашений (тип лямбда-выражений, трюки с неявной областью видимости и т. д.). И, конечно же, в репозитории проекта есть примеры кода, множество сообщений в блогах, видео и т. д. - person Travis Brown; 12.09.2012
comment
Также я думаю, что подход «выбери место для начала» все еще может быть уместным (примерно так я начал использовать Scalaz, и я также чувствовал себя достаточно комфортно с поступающей математикой). - person Travis Brown; 12.09.2012
comment
Спасибо, я отредактировал вопрос и проголосовал за три ответа, которые я получил до сих пор: это хорошие ответы на не очень точный вопрос! - person Andrea; 12.09.2012

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

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

Также изучите чтение подписей Haskell и просмотр Типклассопедия Haskell.

person ron    schedule 12.09.2012
comment
Я думаю, что Практический Scalaz и Monoids — это забавный и простой способ начать. - person ron; 12.09.2012

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

Я выступил с докладом под названием «scalaz For the Rest of Us», который подходит к scalaz через примеры, с которыми все знакомы: мемоизация (Memo в scalaz), проверка домена (Validation в scalaz) и т. д. Таким образом, «вариант использования» ясен. и может начать учиться решать знакомые проблемы, используя мощь scalaz.

person Adam Rosien    schedule 12.09.2012
comment
Спасибо за слайды. Хотя я немного знаком с функциональным программированием, я нашел ваши примеры полезными для изучения некоторых элементов библиотеки Scalaz :-) - person Andrea; 13.09.2012