可能重复:
好scalaz介绍
我想更多地了解Scalaz,可能使用Scalaz7要避免重新布线我的大脑一旦宣布稳定。 我的问题是Scalaz包含了很多功能。 虽然大多数的是指不依赖于其他地区的,我想有由Scalaz提供的,它是如何组织的全球funcitonality的鸟瞰图。 据我所知,Scalaz提供,除其他事项外,
-
Functor
, Applicative
和Monad
特点, - 新的单子,如
Validation
(编辑:原来它只是一个适用) - 单子变压器(
OptionT
, EitherT
....) -
Itereatee
小号 -
Lens
ES -
Zipper
小号
加上这里面有很多隐式转换,以及新构造,如some
与标准库的重叠,但是有关于类型表现更好
:type Some(3) // Some[Int]
:type some(3) // Option[Int]
我的大多数建筑的基本掌握,但我不流利使用任何的概念。
你有什么样的顺序来学习库的任何建议,模块之间存在什么逻辑相关性? 更一般地,我在哪里可以找到图书馆的高度概括?
编辑看来,大多数的回答是针对学习函数式编程,像单子的基本组成部分,所以我会尽量更精确。 我有Haskell和数学家背景的基本知识,所以我的问题是没有关系的范畴论或基本函数式编程。
我的问题是Scalaz是一个巨大的图书馆。 我不知道找一下哪里,什么方法都在各种数据类型可用的或有用的。 我真正需要的是一个映射,比如,会告诉我,当我想遍历需要进行配置的资源,我可能要考虑iteratees,我可以用做什么样的操作。 更多类似的可用的库功能的全景。
我会推荐优秀的系列学习scalaz尤金·横田上Scalaz 7.撰文如下的结构了解您一个Haskell的极大的利好 。 该方法是系统的和非常教学。
我的建议是不要等到你觉得你有一个高层次的了解图书馆随便挑几个工具入手,然后按照概念联系,当您去。
Validation
(其中的方式实际上不是一个单子 )可能是开始的最好的地方。 如果你曾经使用Either
在标准库中进行验证, Validation
会感到既熟悉又方便多了。 你会发现很多有用的讨论, Validation
都在这里 上 StackOverflow的和其他地方 。
一旦你适应了工作的Validation
,你应该有适用函子类型的类,它在许多其他情况下非常有用的一个良好的基本理解。
Monoid
是另一个很好的起点。 这是一个非常简单的类型类(本质上只是一个关联加样操作和单位元),一旦你了解它,你会随处可见类群。 例如见这个答案 (全面披露:这是由我)展示了如何使用幺解决一个问题,可能不是最初看起来非常monoidy。
有很多在其他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)
一旦你有几个对这些概念的一个很好的工作的了解,我建议布伦特Yorgey的Typeclassopedia ,这是哈斯克尔为导向,但确实的给你刚够范畴论和抽象代数,了解大部分的东西你”了出色的工作会发现在Scalaz。
一些我认为有用的视频:
- Scalaz概述尼克鹧鸪和贾森Zaugg的
- 实用Scalaz由克里斯·马歇尔
- 由Edward Kmett透镜 (5份)
- 由托尼·莫里斯读者单子和Rúnar比亚尔纳松
- 由迈克尔·Pilquist国家单子
- Monad的变压器约旦西
大多数的这些有很大的幻灯片,如果你是铁杆然后读取它们没有视频。
也学习到阅读Haskell的类型签名和浏览哈斯克尔typeclassopedia 。
虽然我永远不会从哈斯克尔教程转别人拿走,他们可能会有点令人难以置信,如果你是一个面向对象式的开发者和不熟悉的,为什么你会永远想生活在一个世界的功能。
我给了一个叫“scalaz对于我们其余的人”,这接近scalaz虽然例子大家很熟悉的谈话:记忆化(在scalaz备注),域验证(验证在scalaz)等这样的“用例”是明确的并可以开始学习如何使用scalaz的力量来解决熟悉的问题。
- 幻灯片: http://arosien.github.com/scalaz-base-talk-201208
- 对于A scalaz的cheatsheet “入门”: https://github.com/arosien/scalaz-base-talk-201208/raw/master/scalaz-cheatsheet.pdf