2016-08-03 8 views
0

это мой код x :->GetUsersByPhone где x: scalaz.ValidationNel[ValidationError, Seq[PhoneNumberWithIdentifier]].Scalaz: как применить функцию к успеху ValidationNel?

GetusersByPhone просто случай класса, который обертывания Seq[PhoneNumberWithIdentifier]

Моя проблема с :-> оператором, который я думаю, это правильно, но это вызывает эту ошибку:

[error] /home/simone/radicalbit/mpay-user/play/src/main/scala/com/next/mpay/users/validators/users/GetUsersByPhoneValidation.scala:31: value :-> is not a member of scalaz.ValidationNel[com.next.mpay.users.validators.ValidationError,Seq[com.next.mpay.users.persistence.PhoneNumberWithIdentifier]] 
[error] possible cause: maybe a semicolon is missing before `value :->'? 
[error]   .:->(GetUsersByPhone) 
[error]   ^

Как я могу исправить это? Нужно ли мне импортировать что-то еще, кроме scalaz._ и scalaz.Scalaz._?

+0

Вы пробовали 'GetUsersByPhone.apply'? – stefanobaghino

+0

yep, но он возвращает ту же ошибку – Chobeat

ответ

1

Простой map должен работать, потому что Validation правильно предвзятым:

x.map(GetUsersByPhone) 

:-> Метод исходит из Bifunctor экземпляра.

Но хотя ValidationNel[A, B] это просто тип псевдонима для Validation[NonEmptyList[A], B], и есть Bifunctor экземпляр для Validation, компилятор до сих пор не может найти Bifunctor экземпляр для ValidationNel.

Принуждение ValidationNel к соответствующему Validation также будет работать, хотя:

(x: Validation[NonEmptyList[ValidationError], Seq[PhoneNumberWithIdentifier]]) 
    .:->(GetUsersByPhone) 
+0

Это сработало, спасибо – Chobeat

 Смежные вопросы

  • Нет связанных вопросов^_^