Я использую scalaz7 в проекте, и иногда я сталкиваюсь с проблемами с импортом. Самый простой способ начать -
import scalaz._
import Scalaz._
но иногда это может привести к конфликтам. То, что я делал до сих пор, следующий немного болезненный процесс:
- разработайте минимальный пример, который требует того же импорта, что и мой фактический код
- скопируйте этот пример в отдельный проект
- скомпилируйте его с опцией
-Xprint:typer
, чтобы узнать, как выглядит код после неявного разрешения - импортировать необходимые импликации в исходный проект.
Хотя это работает, я хотел бы упорядочить его. Я вижу, что scalaz7 имеет гораздо более мелкозернистый импорт, но я не совсем понимаю, как они организованы. Например, я вижу, что можно сделать
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
?