正在编写一个完全异步的库来访问远程服务(使用Play2.0),我正在使用Promise并Validation创建非阻塞调用,它具有一次显示失败和有效结果的类型.
Promise来自Play2-scala,Validation来自scalaz.
所以这是这类函数的例子
A => Promise[Validation[E, B]]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中重用结果.所以,如果我想重用x的g,这里是我怎么能这样做
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) 我正在尝试使用无形的方式以类型安全的方式轻松地累积对象.
问题是我想要concat(:::)两个HList.我遇到了一个新手(似乎至少)问题.它错过了Prepend上下文中的隐式实例.
然而,寻找到hlist.scala,我可以看到,一般implicit def是在对象中定义Prepend和PrependAux.
添加import Prepend和import 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) 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)
这里有什么问题?我该如何解决这个问题?
我想在文本中搜索字符串"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)
我的理由是:
此正则表达式始终匹配,因为它只包含可选组,但结果匹配始终为空,即使它可以完全匹配所有可选组.但是,我想对结果匹配进行后期处理,因此我需要尽可能多地捕获它.
我可以强制正则表达式尝试尽可能匹配所有组吗?
或者您是否知道如何搜索多个单词,由某些单词分隔,然后检查哪些单词出现以计算某些相似性?
非常感谢你