加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么不验证Monad? (scalaz7)

发布时间:2020-12-16 09:45:31 所属栏目:安全 来源:网络整理
导读:示例用例: def div2(i: Int): Validation[String,Int] = if (i%2 == 0) Validation.success(i/2) else Validation.failure("odd")def div4(i: Int) = for { a - div2(i) b - div2(a)} yield b 错误:无法取消应用类型scalaz.Validation [String,Int]转换为
示例用例:

def div2(i: Int): Validation[String,Int] = 
    if (i%2 == 0) Validation.success(i/2)
    else Validation.failure("odd")

def div4(i: Int) = for {
    a <- div2(i)
    b <- div2(a)
} yield b

错误:无法取消应用类型scalaz.Validation [String,Int]转换为类型为类型的类型构造函数M [_],类型为scalaz.Bind

我猜这个错误是由编译器造成的,找不到一个Monad实例的验证[String,Int]

我可以为自己做一个,像:

object Instances {
implicit def validationMonad[E] = new Monad[({type L[A] = Validation[E,A]})#L] {
    override def point[A](a: => A) =
        Validation.success(a)
    override def bind[A,B](fa: Validation[E,A])(f: A => Validation[E,B]) =
        fa bind f
}
}

但为什么没有验证呢?毕竟,验证已经定义了bind方法。

此外,我不能导入Validation._并导入Instances._一起(这让我无聊找出…),因为另一个复杂的错误…
模糊的隐含值:类似于validationMonad(我的实例)和方法ValidationInstances1在trait ValidationInstances2 …都匹配一些验证函数…

我应该修改scalaz的来源吗?或者我完全缺少一些东西??
请帮忙?

我正在使用scalaz 7.0.0-M2

解决方法

作为Scalaz组中的 discussed,问题似乎是ap会累积错误,而(伪)单体组合只会在验证的值部分运行。

因此,不能用另一个来表达,因此没有一个monad实例用于验证。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读