Я использую 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
?