복붙노트

[SCALA] 왜 검증 모나드 아닌가요?

SCALA

왜 검증 모나드 아닌가요?

예를 들어 사용 사례 :

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 할 수 없음 [문자열, Int 인] 타입 클래스로 분류되는 종류 M [_]의 타입 생성자에 scalaz.Bind

제 생각 엔 오류가 확인 [문자열, 지능]의 모나드 인스턴스를 찾을 수없는 컴파일러에 의해 발생

내가 좋아하는, 자신을 위해 일을 할 수 있습니다 :

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
}
}

그런데 왜 검증은 이미 그것을 가지고하지 않는 이유는 무엇입니까? 결국, 검증은 이미 정의 된 바인드 메소드가 있습니다.

또한, 나는 때문에 또 다른 복잡한 오류, (이 ... 알아 내기 위해 looong 날 데려 갔어) 함께 더 이상 수입 Validation._ 수입 Instances._을 가질 수 없습니다 ... 모호한 암시 값 : 특성 ValidationInstances2 모두 validationMonad (내 경우), 및 방법 ValidationInstances1 같은 일이 ... 검증의 어떤은 Functor 일치 모두 ...

나는 scalaz의 소스를 수정해야합니까? 또는 나는 완전히 ~ 뭔가를 누락? 도와주세요 ~

내가 scalaz 사용하고 7.0.0-M2

해결법

  1. ==============================

    1.Scalaz 그룹에서 논의 된 바와 같이, 문제는 AP가 (사이비) 모나드 구성은 검증의 값 부분에 작동 할 것입니다 반면 오류를 축적 할 것으로 보인다.

    Scalaz 그룹에서 논의 된 바와 같이, 문제는 AP가 (사이비) 모나드 구성은 검증의 값 부분에 작동 할 것입니다 반면 오류를 축적 할 것으로 보인다.

    따라서, 하나는 다른 표현 될 수없고, 따라서 아무런 모나드 인스턴스는 검증을 위해 존재하지 않는다.

  2. ==============================

    2.문제는 모나드 묵시적으로 실용적 펑 실제 실용적 펑 동일하지 않는다는 것이다

    문제는 모나드 묵시적으로 실용적 펑 실제 실용적 펑 동일하지 않는다는 것이다

  3. from https://stackoverflow.com/questions/12211776/why-isnt-validation-a-monad by cc-by-sa and MIT license