Управление импортом в Scalaz7
Я использую scalaz7 в проекте, и иногда у меня возникают проблемы с импортом. Самый простой способ начать работу-это
import scalaz._
import Scalaz._
, но иногда это может привести к конфликтам. То, что я делал до сих пор следующий слегка болезненный процесс:
- разработайте минимальный пример, который нуждается в том же импорте, что и мой фактический код
- скопируйте этот пример в отдельный проект
- скомпилируйте его с опцией
-Xprint:typer
, чтобы узнать, как код выглядит после неявного резолюция - импортировать необходимые неявные преобразования в исходном проекте.
import scalaz.std.option._
import scalaz.std.AllInstances._
import scalaz.std.AllFunctions._
import scalaz.syntax.monad._
import scalaz.syntax.all._
import scalaz.syntax.std.boolean._
import scalaz.syntax.std.all._
И так далее.
В качестве примера, скажем, я хочу работать с проверками. Что мне нужно, например, чтобы ввести проверку имплицирует и делает следующую компиляцию?Как организованы эти субимпорты?
3.fail[String]
Как насчет создания ValidationNEL[A, B]
экземпляра Applicative
?
1 ответ:
Этот пост в блоге подробно объясняет структуру пакета и импортирует a la carte в scalaz7: http://eed3si9n.com/learning-scalaz-day13
Для ваших конкретных примеров, для 3.сбой [строка] вам понадобится:
import scalaz.syntax.validation._
Валидация уже имеет метод
ap
:scala> "hello".successNel[Int] ap ((s: String) => "x"+s).successNel[Int] res1: scalaz.Validation[scalaz.NonEmptyList[Int],java.lang.String] = Success(xhello)
Чтобы получить оператор, вам потребуется такой импорт:
import scalaz.syntax.applicative._
Тогда вы можете сделать:
"hello".successNel[Int] <*> ((s: String) => "x"+s).successNel[Int]