可能重复: 好黄曲柳游戏攻略
我想了解更多关于Scalaz的知识,可能会使用Scalaz7来避免我的大脑在声明稳定后重新布线。我的问题是Scalaz包含了很多功能。虽然它大部分都是独立于其他部分的,但我希望对Scalaz提供的全球功能以及它的组织方式有一个鸟瞰。据我所知,斯卡拉兹提出,
Functor,Applicative和Monad性状Validation (编辑:原来它只是一个应用程序)OptionT,EitherT.)Itereatee%sLensesZipper%s此外,还有许多隐式转换,以及与标准库重叠但在类型方面表现更好的新构造函数(如some )。
:type Some(3) // Some[Int]
:type some(3) // Option[Int]我基本掌握了这些结构中的大部分,但我对其中的任何概念都不熟悉。
您有什么建议来学习这个库,模块之间存在什么样的逻辑依赖?更广泛地说,在哪里可以找到库的高级概述?
编辑似乎大多数答案都是为了学习函数式编程的基本组件,比如monads,所以我将尝试更精确。我有Haskell的基本知识和数学家背景,所以我的问题与范畴理论或基本函数式编程无关。
我的问题是,Scalaz是一个巨大的库。我不知道在不同的数据类型上可以找到什么、哪些方法是可用的或有用的。我真正需要的是一张地图,例如,它会告诉我,当我想要迭代处理需要处理的资源时,我可能想考虑迭代,以及我可以用它做什么样的操作。更像是库中可用功能的全景图。
发布于 2012-09-12 13:12:04
我推荐尤金·横田在斯卡拉斯7上的优秀系列学习黄曲柳。作者采用了给你一个好的哈斯克尔的结构。这种方法是系统的,而且非常具有教育性。
发布于 2012-09-12 13:18:54
我的建议是,而不是,等到你觉得自己对库有了高层次的理解--只是先选择几个工具,然后在你走的时候遵循概念链接。
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)一旦你对这些概念有了很好的理解,我建议布伦特约尔盖的[医]百叶草,它是面向Haskell的,但是给你提供了足够多的范畴理论和抽象代数来理解你在Scalaz中找到的大部分东西。
发布于 2012-09-12 13:14:01
我发现的一些视频很有用:
其中大多数都有很棒的幻灯片,如果你是硬核的话,那就在没有视频的情况下阅读它们。
还可以从学学到读Haskell类型签名并浏览Haskell打字机。
https://stackoverflow.com/questions/12387800
复制相似问题