And*_*rea 24 functional-programming scala scalaz scalaz7
可能重复:
好的scalaz介绍
我想了解更多有关Scalaz的信息,可能会使用Scalaz7来避免在声明稳定后重新布线.我的问题是Scalaz包含很多功能.虽然大部分内容都是独立于其他部分,但我希望能够全面了解Scalaz提供的全局功能以及它的组织方式.据我所知,Scalaz除其他外提供了
Functor,Applicative和Monad特征,Validation(编辑:原来它只是一个应用)OptionT,EitherT....)Itereatee小号LensESZipper小号除此之外还有很多隐式转换,以及新的构造函数,例如some与标准库重叠但在类型方面表现更好
:type Some(3) // Some[Int]
:type some(3) // Option[Int]
Run Code Online (Sandbox Code Playgroud)
我对大多数这些结构有基本的把握,但我对任何概念都不熟悉.
您对以何种顺序学习库有什么建议吗?模块之间存在哪些逻辑依赖关系?更一般地说,我在哪里可以找到图书馆的高级概述?
编辑似乎大多数答案都是针对学习函数式编程的基本组件,比如monad,所以我会尝试更精确.我有Haskell的基本知识和数学家背景,所以我的问题与类别理论或基本函数式编程无关.
我的问题是Scalaz是一个庞大的图书馆.我不知道在哪里找到什么,在各种数据类型上有哪些方法可用或有用.我真正需要的是一张地图,例如,它会告诉我,当我想要迭代需要处理的资源时,我可能想要考虑迭代以及我可以用它做什么样的操作.更像是图书馆可用功能的全景.
par*_*tic 11
我会推荐Eugene Yokota在Scalaz 7上的优秀系列学习学习scalaz.作者遵循了学习你是一个很好的Haskell的结构.这种方法是系统的,非常教学的.
我的建议是不要等到你对图书馆有一个高层次的了解 - 只需选择几个工具开始,然后按照概念链接进行操作.
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)
Run Code Online (Sandbox Code Playgroud)
一旦你对这些概念中的一些有了很好的理解,我就建议使用Brent Yorgey的Typeclassopedia,这是面向Haskell的,但它能为你提供足够的类别理论和抽象代数来理解你的大部分内容.我会在Scalaz找到.
我觉得有些视频很有用:
其中大多数都有很棒的幻灯片,如果你是硬核,那么在没有视频的情况下阅读它们.
也学习到阅读Haskell的类型签名和浏览哈斯克尔typeclassopedia.
虽然我永远不会让任何人离开Haskell教程,但如果你是一个OOP风格的开发人员并且不熟悉为什么你想要在功能世界中生活,那么他们可能会有点令人难以置信.
我给出了一个名为"scalaz For the Rest of We Us"的演讲,它通过每个人都熟悉的例子来处理scalaz:memoization(scalaz中的备忘录),域验证(scalaz中的验证)等.这样的"用例"很清楚并且可以开始学习如何使用scalaz的力量解决熟悉的问题.
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |