Tag: Scalaz

Scala中的真实世界函数式编程

SOOOO … 半群,幺半群,单子,函子,镜头,变形,变形,箭……这些都听起来不错,经过一两次(或十次)的练习,你就能掌握它们的本质。 和Scalaz ,你可以免费得到它们。 然而,就现实世界的编程而言,我发现自己正在努力寻找这些概念的用法。 是的,当然,我总是在网上find一些人使用monads IO或斯卡拉镜头,但… …仍然… 我试图find的是某种模式的“规定性”方面的东西。 就像这样:“在这里,你正在试图解决这个问题 ,解决这个问题的一个好办法就是用这种方法来使用镜头!” build议? 更新:按照这两行,有一两本书,会很棒(感谢Paul): Java核心库中的GoFdevise模式示例

使用Scalaz Streamparsing任务(replaceScalaz迭代器)

介绍 我在一些项目中使用了Scalaz 7的迭代,主要用于处理大文件。 我想开始转换到斯卡拉斯stream ,这是旨在取代iteratee包(坦率地说是缺less了很多件,是一种痛苦的使用)。 stream是基于机器 (iteratee思想的另一个变种),这也已经在Haskell中实现 。 我已经使用了一些Haskell机器库,但是机器和stream之间的关系并不是完全明显的(至less对我来说),stream库的文档还是有点稀疏 。 这个问题是关于一个简单的parsing任务,我希望看到实现使用stream而不是iteratees。 如果没有人能够让我知道,我会自己回答这个问题,但是我相信我并不是唯一一个正在(或者至less考虑)这个过渡的人,因为无论如何我都需要完成这个练习,我觉得我不妨公开做。 任务 假设我有一个包含句子的文件,这些句子已经被标记并且标记了词性: no UH , , it PRP was VBD n't RB monday NNP . . the DT equity NN market NN was VBD illiquid JJ . . 每行有一个令牌,单词和词性由一个空格分隔,空行代表句子的边界。 我想parsing这个文件并返回一个句子列表,我们可以将它们表示为string元组列表: List((no,UH), (,,,), (it,PRP), (was,VBD), (n't,RB), (monday,NNP), (.,.)) List((the,DT), (equity,NN), (market,NN), (was,VBD), (illiquid,JJ), (.,.) […]

函数语法puzzler在scalaz中

在观看Nick Partidge关于scalaz的演示 之后 ,我看到了这个例子,这真是太棒了: import scalaz._ import Scalaz._ def even(x: Int) : Validation[NonEmptyList[String], Int] = if (x % 2 ==0) x.success else "not even: %d".format(x).wrapNel.fail println( even(3) <|*|> even(5) ) //prints: Failure(NonEmptyList(not even: 3, not even: 5)) 我试图理解<|*|>方法在做什么,这里是源代码: def <|*|>[B](b: M[B])(implicit t: Functor[M], a: Apply[M]): M[(A, B)] = <**>(b, (_: A, _: B)) 好吧,这相当混乱(!) – […]

基于返回types推理的意外隐式parsing

给定一个typestypes,应根据返回types执行实例select: case class Monoid[A](m0: A) // We only care about the zero here implicit def s[T] : Monoid[Set[T]] = Monoid(Set.empty[T]) implicit def l[T] : Monoid[List[T]] = Monoid(List.empty[T]) def mzero[A](implicit m: Monoid[A]) : A = m.m0 为什么Scala(2.11.6)无法parsing正确的实例: scala> mzero : List[Int] <console>:24: error: ambiguous implicit values: both method s of type [T]=> Monoid[Set[T]] and method l […]

不同的Scala Actor实现概述

我试图find“正确”的演员实施。 我意识到有一堆他们,挑一个有点混乱。 就我个人而言,我对远程演员特别感兴趣,但是我认为一个完整的概述会对其他人有所帮助。 这是一个相当普遍的问题,所以请随时回答你所知道的实现。 我知道下面的Scala Actor实现(SAI)。 请添加缺less的。 斯卡拉2.7(区别于) 斯卡拉2.8 Akka( http://www.akkasource.org/ ) 电梯( http://liftweb.net/ ) Scalaz( http://code.google.com/p/scalaz/ ) 这些SAI的目标用例是什么(轻量级与“重”的企业级框架)? 他们是否支持远程演员? 远程参与者在SAI中有什么缺点? 他们的performance如何? 社区有多活跃? 他们开始有多容易? 文档有多好? 他们有多容易延伸? 他们有多稳定? 哪些项目正在使用它们? 他们有什么缺点? 他们的devise原则是什么? 他们是基于线程还是基于事件(接收/反应)还是两者? 嵌套接收 热衷于演员的消息循环

在Scala中做HTTP请求

我想发出一个简单的POST请求到一个web服务,它返回一些XML在斯卡拉。 似乎Dispatch是用于此任务的标准库,但我找不到它的文档。 上面链接的主站点详细解释了什么是承诺以及如何执行asynchronous编程,但实际上并不loggingAPI。 有一个周期表 – 看起来有点可怕 – 但它只对那些已经知道该怎么做的人才有用,只需要提醒一下这个神秘的语法。 也似乎斯卡拉斯有一些HTTP的设施 ,但我也找不到任何文件。

Reader Monaddependency injection:多重依赖,嵌套调用

当被问及Scala中的dependency injection问题时,很多答案都指向了使用Reader Monad的方法,无论是来自Scalaz还是自己的方法。 有很多非常清晰的文章描述了这种方法的基础(例如Runar的谈话 , Jason的博客 ),但是我没有设法find一个更完整的例子,我没有看到这个方法的优点,比如更多传统的“手动”DI(参见我写的指南 )。 很可能我错过了一些重要的观点,因此是一个问题。 举一个例子,让我们想象我们有这些类: trait Datastore { def runQuery(query: String): List[String] } trait EmailServer { def sendEmail(to: String, content: String): Unit } class FindUsers(datastore: Datastore) { def inactive(): Unit = () } class UserReminder(findUser: FindUsers, emailServer: EmailServer) { def emailInactive(): Unit = () } class CustomerRelations(userReminder: UserReminder) { def […]

用Scalaz 7 zipWithIndex /组枚举避免内存泄漏

背景 正如在这个问题中指出的,我正在使用Scalaz 7迭代来处理恒定堆空间中的大量(即无界)数据stream。 我的代码如下所示: type ErrorOrT[M[+_], A] = EitherT[M, Throwable, A] type ErrorOr[A] = ErrorOrT[IO, A] def processChunk(c: Chunk, idx: Long): Result def process(data: EnumeratorT[Chunk, ErrorOr]): IterateeT[Vector[(Chunk, Long)], ErrorOr, Vector[Result]] = Iteratee.fold[Vector[(Chunk, Long)], ErrorOr, Vector[Result]](Nil) { (rs, vs) => rs ++ vs map { case (c, i) => processChunk(c, i) } } &= (data.zipWithIndex mapE […]