小编and*_*lla的帖子

使用Scalaz在Scala中使用Validation进行异步计算

正在编写一个完全异步的库来访问远程服务(使用Play2.0),我正在使用PromiseValidation创建非阻塞调用,它具有一次显示失败和有效结果的类型.

Promise来自Play2-scala,Validation来自scalaz.

所以这是这类函数的例子

  • F :: A => Promise[Validation[E, B]]
  • G :: B => Promise[Validation[E, C]]

到目前为止,一切都很好,现在如果我要撰写他们,我可以简单的使用的事实Promise呈现flatMap,这样我就可以用了,理解做

for (
   x <- f(a);
   y <- g(b)
) yield y
Run Code Online (Sandbox Code Playgroud)

好的,我在这里找到了我的问题的捷径,因为我没有Validation在for-comprehension中重用结果.所以,如果我想重用xg,这里是我怎么能这样做

for (
   x <- f(a); // x is a Validation
   y <- x.fold(
      fail => Promise.pure(x),
      ok => g(ok)
   )
) yield y
Run Code Online (Sandbox Code Playgroud)

很公平,但这种样板会一遍又一遍地污染我的代码.这里的问题是我有一种两级Monadic结构M[N[_]].

在这个阶段,f°编程中是否有任何结构可以通过轻松跳过secong级别来使用这种结构:

for (
   x <- f(a); //x is a …
Run Code Online (Sandbox Code Playgroud)

scala scalaz playframework-2.0

7
推荐指数
1
解决办法
971
查看次数

无形:前置.隐含未找到

我正在尝试使用无形的方式以类型安全的方式轻松地累积对象.

问题是我想要concat(:::)两个HList.我遇到了一个新手(似乎至少)问题.它错过了Prepend上下文中的隐式实例.

然而,寻找到hlist.scala,我可以看到,一般implicit def是在对象中定义PrependPrependAux.

添加import Prependimport PrependAux手动没有改变任何东西(显然......).

所以这里的代码减少到最小:

enter code here

import shapeless._
import HList._
import Prepend._
import PrependAux._

object test {

  val a:HList = 1 :: 4 :: "A" :: HNil
  val b:HList = "R" :: false :: HNil

  val c:HList = a ::: b   // <<<<<<<<<<< NEEDS A Prepend in the context 

}
Run Code Online (Sandbox Code Playgroud)

现在在控制台中:

[error]     test.scala:10: could not find implicit …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala shapeless

7
推荐指数
1
解决办法
1230
查看次数

调用toArray时编译器错误

scala> def a[A](b:Seq[A]) = b.toArray
<console>:7: error: could not find implicit value 
                    for evidence parameter of type ClassManifest[A]
       def a[A](b:Seq[A]) = b.toArray
                              ^
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?我该如何解决这个问题?

scala scala-collections

3
推荐指数
1
解决办法
980
查看次数

强制正则表达式匹配可选组

我想在文本中搜索字符串"W foo X bar Y baz Z".W,X,Y,Z是不重要的分隔符,我不能搜索它们.foo,bar和baz是我感兴趣的词.订单并不重要.我想知道文本中出现的所需词语"好".

我正在尝试以下方面

(?:\Qfoo\E)?.{0,3}(?:\Qbar\E)?.{0,3}(?:\Qbaz\E)?
Run Code Online (Sandbox Code Playgroud)

我的理由是:

  • 将每个单词打包在一个可选组中,因此不需要发生[(?:是非捕获组,\ Q ...\E只是转义]
  • 用.{0,3}分隔每个单词(任何字符,出现0-3次)

此正则表达式始终匹配,因为它只包含可选组,但结果匹配始终为空,即使它可以完全匹配所有可选组.但是,我想对结果匹配进行后期处理,因此我需要尽可能多地捕获它.

我可以强制正则表达式尝试尽可能匹配所有组吗?

或者您是否知道如何搜索多个单词,由某些单词分隔,然后检查哪些单词出现以计算某些相似性?

非常感谢你

java regex scala parser-combinators

1
推荐指数
1
解决办法
1294
查看次数