diff --git a/core/shared/src/main/scala/coursier/Fetch.scala b/core/shared/src/main/scala/coursier/Fetch.scala index dcf9e520e..36fe18a46 100644 --- a/core/shared/src/main/scala/coursier/Fetch.scala +++ b/core/shared/src/main/scala/coursier/Fetch.scala @@ -1,9 +1,9 @@ package coursier -import coursier.util.EitherT +import coursier.util.{EitherT, Monad} import scala.language.higherKinds -import scalaz.{Monad, Nondeterminism} +import scalaz.Nondeterminism object Fetch { diff --git a/core/shared/src/main/scala/coursier/core/Repository.scala b/core/shared/src/main/scala/coursier/core/Repository.scala index 8e88b403b..cdd9d5c69 100644 --- a/core/shared/src/main/scala/coursier/core/Repository.scala +++ b/core/shared/src/main/scala/coursier/core/Repository.scala @@ -3,9 +3,8 @@ package coursier.core import coursier.Fetch import scala.language.higherKinds -import scalaz.Monad import coursier.core.compatibility.encodeURIComponent -import coursier.util.EitherT +import coursier.util.{EitherT, Monad} trait Repository extends Product with Serializable { def find[F[_]]( diff --git a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala index 92bc88fde..827d78a41 100644 --- a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala +++ b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala @@ -1,9 +1,10 @@ package coursier package core +import coursier.util.Monad + import scala.annotation.tailrec import scala.language.higherKinds -import scalaz.Monad sealed abstract class ResolutionProcess { diff --git a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala index 0fc38d9dd..f86336c96 100644 --- a/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala +++ b/core/shared/src/main/scala/coursier/ivy/IvyRepository.scala @@ -2,10 +2,9 @@ package coursier.ivy import coursier.Fetch import coursier.core._ -import coursier.util.{EitherT, WebPage} +import coursier.util.{EitherT, Monad, WebPage} import scala.language.higherKinds -import scalaz.Monad final case class IvyRepository( pattern: Pattern, diff --git a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala index ee6ac4a92..3f3333165 100644 --- a/core/shared/src/main/scala/coursier/maven/MavenRepository.scala +++ b/core/shared/src/main/scala/coursier/maven/MavenRepository.scala @@ -3,10 +3,9 @@ package coursier.maven import coursier.Fetch import coursier.core._ import coursier.core.compatibility.encodeURIComponent -import coursier.util.{EitherT, WebPage} +import coursier.util.{EitherT, Monad, WebPage} import scala.language.higherKinds -import scalaz.Monad object MavenRepository { val SnapshotTimestamp = "(.*-)?[0-9]{8}\\.[0-9]{6}-[0-9]+".r diff --git a/core/shared/src/main/scala/coursier/util/EitherT.scala b/core/shared/src/main/scala/coursier/util/EitherT.scala index c4324e9f1..b69501fc0 100644 --- a/core/shared/src/main/scala/coursier/util/EitherT.scala +++ b/core/shared/src/main/scala/coursier/util/EitherT.scala @@ -1,7 +1,6 @@ package coursier.util import scala.language.higherKinds -import scalaz.Monad final case class EitherT[F[_], L, R](run: F[Either[L, R]]) { diff --git a/core/shared/src/main/scala/coursier/util/Monad.scala b/core/shared/src/main/scala/coursier/util/Monad.scala new file mode 100644 index 000000000..026ca2ea7 --- /dev/null +++ b/core/shared/src/main/scala/coursier/util/Monad.scala @@ -0,0 +1,21 @@ +package coursier.util + +import scala.language.higherKinds + +trait Monad[F[_]] { + def point[A](a: A): F[A] + def bind[A, B](elem: F[A])(f: A => F[B]): F[B] + + def map[A, B](elem: F[A])(f: A => B): F[B] = + bind(elem)(a => point(f(a))) +} + +object Monad { + + implicit def fromScalaz[F[_]](implicit M: scalaz.Monad[F]): Monad[F] = + new Monad[F] { + def point[A](a: A) = M.pure(a) + def bind[A, B](elem: F[A])(f: A => F[B]) = M.bind(elem)(f) + } + +} diff --git a/extra/src/main/scala/coursier/FallbackDependenciesRepository.scala b/extra/src/main/scala/coursier/FallbackDependenciesRepository.scala index 1f984d00d..50ea1b297 100644 --- a/extra/src/main/scala/coursier/FallbackDependenciesRepository.scala +++ b/extra/src/main/scala/coursier/FallbackDependenciesRepository.scala @@ -3,10 +3,9 @@ package coursier import java.io.{File, FileNotFoundException, IOException} import java.net.{HttpURLConnection, URL, URLConnection} -import coursier.util.EitherT +import coursier.util.{EitherT, Monad} import scala.language.higherKinds -import scalaz.Monad object FallbackDependenciesRepository { diff --git a/sbt-coursier/src/main/scala/coursier/InterProjectRepository.scala b/sbt-coursier/src/main/scala/coursier/InterProjectRepository.scala index c6c58410e..23087d480 100644 --- a/sbt-coursier/src/main/scala/coursier/InterProjectRepository.scala +++ b/sbt-coursier/src/main/scala/coursier/InterProjectRepository.scala @@ -1,9 +1,8 @@ package coursier -import coursier.util.EitherT +import coursier.util.{EitherT, Monad} import scala.language.higherKinds -import scalaz.Monad final case class InterProjectRepository(projects: Seq[Project]) extends Repository { diff --git a/tests/shared/src/test/scala/coursier/test/TestRepository.scala b/tests/shared/src/test/scala/coursier/test/TestRepository.scala index 7e29cd4e1..a0c016447 100644 --- a/tests/shared/src/test/scala/coursier/test/TestRepository.scala +++ b/tests/shared/src/test/scala/coursier/test/TestRepository.scala @@ -2,10 +2,9 @@ package coursier package test import coursier.core._ -import coursier.util.EitherT +import coursier.util.{EitherT, Monad} import scala.language.higherKinds -import scalaz.Monad final case class TestRepository(projects: Map[(Module, String), Project]) extends Repository { val source = new core.Artifact.Source {