diff options
author | adamw <adam@warski.org> | 2017-08-31 14:40:29 +0200 |
---|---|---|
committer | adamw <adam@warski.org> | 2017-08-31 14:40:29 +0200 |
commit | 9ec0994878856743e54c4d1a38c0c80b318d7be7 (patch) | |
tree | fb55121a0bc90325369a4c1fa8e73da9c35c37a4 | |
parent | 71f6a1eeee412045cc08ce8894194573362cb8f0 (diff) | |
download | sttp-9ec0994878856743e54c4d1a38c0c80b318d7be7.tar.gz sttp-9ec0994878856743e54c4d1a38c0c80b318d7be7.tar.bz2 sttp-9ec0994878856743e54c4d1a38c0c80b318d7be7.zip |
Change MonadError syntax to improve type inference
11 files changed, 47 insertions, 37 deletions
diff --git a/async-http-client-handler/cats/src/main/scala/com/softwaremill/sttp/asynchttpclient/cats/AsyncHttpClientCatsHandler.scala b/async-http-client-handler/cats/src/main/scala/com/softwaremill/sttp/asynchttpclient/cats/AsyncHttpClientCatsHandler.scala index fec0eab..a2c374a 100644 --- a/async-http-client-handler/cats/src/main/scala/com/softwaremill/sttp/asynchttpclient/cats/AsyncHttpClientCatsHandler.scala +++ b/async-http-client-handler/cats/src/main/scala/com/softwaremill/sttp/asynchttpclient/cats/AsyncHttpClientCatsHandler.scala @@ -59,9 +59,9 @@ private[cats] class AsyncMonad[F[_]](implicit F: Async[F]) override def unit[T](t: T): F[T] = F.pure(t) - override def map[T, T2](fa: F[T], f: (T) => T2): F[T2] = F.map(fa)(f) + override def map[T, T2](fa: F[T])(f: (T) => T2): F[T2] = F.map(fa)(f) - override def flatMap[T, T2](fa: F[T], f: (T) => F[T2]): F[T2] = + override def flatMap[T, T2](fa: F[T])(f: (T) => F[T2]): F[T2] = F.flatMap(fa)(f) override def error[T](t: Throwable): F[T] = F.raiseError(t) diff --git a/async-http-client-handler/fs2/src/main/scala/com/softwaremill/sttp/asynchttpclient/fs2/AsyncHttpClientFs2Handler.scala b/async-http-client-handler/fs2/src/main/scala/com/softwaremill/sttp/asynchttpclient/fs2/AsyncHttpClientFs2Handler.scala index dc30925..1686b25 100644 --- a/async-http-client-handler/fs2/src/main/scala/com/softwaremill/sttp/asynchttpclient/fs2/AsyncHttpClientFs2Handler.scala +++ b/async-http-client-handler/fs2/src/main/scala/com/softwaremill/sttp/asynchttpclient/fs2/AsyncHttpClientFs2Handler.scala @@ -4,7 +4,12 @@ import java.nio.ByteBuffer import cats.effect._ import com.softwaremill.sttp.asynchttpclient.AsyncHttpClientHandler -import com.softwaremill.sttp.{MonadAsyncError, SttpHandler, Utf8, concatByteBuffers} +import com.softwaremill.sttp.{ + MonadAsyncError, + SttpHandler, + Utf8, + concatByteBuffers +} import fs2._ import fs2.interop.reactivestreams._ import org.asynchttpclient.{ @@ -88,9 +93,9 @@ private[fs2] class EffectMonad[F[_]](implicit F: Effect[F]) override def unit[T](t: T): F[T] = F.pure(t) - override def map[T, T2](fa: F[T], f: (T) => T2): F[T2] = F.map(fa)(f) + override def map[T, T2](fa: F[T])(f: (T) => T2): F[T2] = F.map(fa)(f) - override def flatMap[T, T2](fa: F[T], f: (T) => F[T2]): F[T2] = + override def flatMap[T, T2](fa: F[T])(f: (T) => F[T2]): F[T2] = F.flatMap(fa)(f) override def error[T](t: Throwable): F[T] = F.raiseError(t) diff --git a/async-http-client-handler/monix/src/main/scala/com/softwaremill/sttp/asynchttpclient/monix/AsyncHttpClientMonixHandler.scala b/async-http-client-handler/monix/src/main/scala/com/softwaremill/sttp/asynchttpclient/monix/AsyncHttpClientMonixHandler.scala index 1ef3973..786f176 100644 --- a/async-http-client-handler/monix/src/main/scala/com/softwaremill/sttp/asynchttpclient/monix/AsyncHttpClientMonixHandler.scala +++ b/async-http-client-handler/monix/src/main/scala/com/softwaremill/sttp/asynchttpclient/monix/AsyncHttpClientMonixHandler.scala @@ -2,7 +2,12 @@ package com.softwaremill.sttp.asynchttpclient.monix import java.nio.ByteBuffer -import com.softwaremill.sttp.{MonadAsyncError, SttpHandler, Utf8, concatByteBuffers} +import com.softwaremill.sttp.{ + MonadAsyncError, + SttpHandler, + Utf8, + concatByteBuffers +} import com.softwaremill.sttp.asynchttpclient.AsyncHttpClientHandler import monix.eval.Task import monix.execution.{Cancelable, Scheduler} @@ -77,9 +82,9 @@ object AsyncHttpClientMonixHandler { private[monix] object TaskMonad extends MonadAsyncError[Task] { override def unit[T](t: T): Task[T] = Task.now(t) - override def map[T, T2](fa: Task[T], f: (T) => T2): Task[T2] = fa.map(f) + override def map[T, T2](fa: Task[T])(f: (T) => T2): Task[T2] = fa.map(f) - override def flatMap[T, T2](fa: Task[T], f: (T) => Task[T2]): Task[T2] = + override def flatMap[T, T2](fa: Task[T])(f: (T) => Task[T2]): Task[T2] = fa.flatMap(f) override def async[T]( diff --git a/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/AsyncHttpClientScalazHandler.scala b/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/AsyncHttpClientScalazHandler.scala index 4bc169d..aea6c0e 100644 --- a/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/AsyncHttpClientScalazHandler.scala +++ b/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/AsyncHttpClientScalazHandler.scala @@ -46,9 +46,9 @@ object AsyncHttpClientScalazHandler { private[scalaz] object TaskMonad extends MonadAsyncError[Task] { override def unit[T](t: T): Task[T] = Task.point(t) - override def map[T, T2](fa: Task[T], f: (T) => T2): Task[T2] = fa.map(f) + override def map[T, T2](fa: Task[T])(f: (T) => T2): Task[T2] = fa.map(f) - override def flatMap[T, T2](fa: Task[T], f: (T) => Task[T2]): Task[T2] = + override def flatMap[T, T2](fa: Task[T])(f: (T) => Task[T2]): Task[T2] = fa.flatMap(f) override def async[T]( diff --git a/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala b/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala index f8122cc..8b908cb 100644 --- a/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala +++ b/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala @@ -139,12 +139,12 @@ abstract class AsyncHttpClientHandler[R[_], S](asyncHttpClient: AsyncHttpClient, val b = if (codeIsSuccess(baseResponse.code)) { rm.unit(Right(responseAs.responseIsStream(s))) } else { - rm.map(publisherToString(p), Left(_: String)) + rm.map(publisherToString(p))(Left(_)) } - success(rm.map(b, { bb: Either[String, T] => + success(rm.map(b) { bb: Either[String, T] => baseResponse.copy(body = bb) - })) + }) } } @@ -235,13 +235,14 @@ abstract class AsyncHttpClientHandler[R[_], S](asyncHttpClient: AsyncHttpClient, val base = readResponseNoBody(response) val body = if (codeIsSuccess(base.code)) { - rm.map(eagerResponseHandler(response).handle(responseAs, rm), Right(_: T)) + rm.map(eagerResponseHandler(response).handle(responseAs, rm))(Right(_)) } else { - rm.map(eagerResponseHandler(response).handle(asString, rm), - Left(_: String)) + rm.map(eagerResponseHandler(response).handle(asString, rm))(Left(_)) } - rm.map(body, (b: Either[String, T]) => base.copy(body = b)) + rm.map(body) { b: Either[String, T] => + base.copy(body = b) + } } private def readResponseNoBody(response: AsyncResponse): Response[Unit] = { diff --git a/core/src/main/scala/com/softwaremill/sttp/MonadError.scala b/core/src/main/scala/com/softwaremill/sttp/MonadError.scala index 604e964..34edb0a 100644 --- a/core/src/main/scala/com/softwaremill/sttp/MonadError.scala +++ b/core/src/main/scala/com/softwaremill/sttp/MonadError.scala @@ -6,11 +6,11 @@ import scala.util.{Failure, Success, Try} trait MonadError[R[_]] { def unit[T](t: T): R[T] - def map[T, T2](fa: R[T], f: T => T2): R[T2] - def flatMap[T, T2](fa: R[T], f: T => R[T2]): R[T2] + def map[T, T2](fa: R[T])(f: T => T2): R[T2] + def flatMap[T, T2](fa: R[T])(f: T => R[T2]): R[T2] def error[T](t: Throwable): R[T] - def flatten[T](ffa: R[R[T]]): R[T] = flatMap[R[T], T](ffa, identity) + def flatten[T](ffa: R[R[T]]): R[T] = flatMap[R[T], T](ffa)(identity) def fromTry[T](t: Try[T]): R[T] = t match { case Success(v) => unit(v) @@ -24,8 +24,8 @@ trait MonadAsyncError[R[_]] extends MonadError[R] { object IdMonad extends MonadError[Id] { override def unit[T](t: T): Id[T] = t - override def map[T, T2](fa: Id[T], f: (T) => T2): Id[T2] = f(fa) - override def flatMap[T, T2](fa: Id[T], f: (T) => Id[T2]): Id[T2] = f(fa) + override def map[T, T2](fa: Id[T])(f: (T) => T2): Id[T2] = f(fa) + override def flatMap[T, T2](fa: Id[T])(f: (T) => Id[T2]): Id[T2] = f(fa) override def error[T](t: Throwable): Id[T] = throw t } @@ -33,8 +33,8 @@ class FutureMonad(implicit ec: ExecutionContext) extends MonadAsyncError[Future] { override def unit[T](t: T): Future[T] = Future.successful(t) - override def map[T, T2](fa: Future[T], f: (T) => T2): Future[T2] = fa.map(f) - override def flatMap[T, T2](fa: Future[T], f: (T) => Future[T2]): Future[T2] = + override def map[T, T2](fa: Future[T])(f: (T) => T2): Future[T2] = fa.map(f) + override def flatMap[T, T2](fa: Future[T])(f: (T) => Future[T2]): Future[T2] = fa.flatMap(f) override def error[T](t: Throwable): Future[T] = Future.failed(t) diff --git a/core/src/main/scala/com/softwaremill/sttp/ResponseAs.scala b/core/src/main/scala/com/softwaremill/sttp/ResponseAs.scala index 14d3606..00f549f 100644 --- a/core/src/main/scala/com/softwaremill/sttp/ResponseAs.scala +++ b/core/src/main/scala/com/softwaremill/sttp/ResponseAs.scala @@ -85,7 +85,7 @@ object ResponseAs { responseAs match { case mra @ MappedResponseAs(raw, g) => - responseMonad.map(responseMonad.fromTry(handleBasic(mra.raw)), mra.g) + responseMonad.map(responseMonad.fromTry(handleBasic(mra.raw)))(mra.g) case bra: BasicResponseAs[T, S] => responseMonad.fromTry(handleBasic(bra)) } diff --git a/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala b/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala index fd836bd..26464ba 100644 --- a/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala +++ b/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala @@ -14,13 +14,13 @@ trait SttpHandler[R[_], -S] { def send[T](request: Request[T, S]): R[Response[T]] = { val resp = doSend(request) if (request.options.followRedirects) { - responseMonad.flatMap(resp, { response: Response[T] => + responseMonad.flatMap(resp) { response: Response[T] => if (response.isRedirect) { followRedirect(request, response) } else { responseMonad.unit(response) } - }) + } } else { resp } diff --git a/core/src/main/scala/com/softwaremill/sttp/package.scala b/core/src/main/scala/com/softwaremill/sttp/package.scala index 24eb32c..63b82f0 100644 --- a/core/src/main/scala/com/softwaremill/sttp/package.scala +++ b/core/src/main/scala/com/softwaremill/sttp/package.scala @@ -253,7 +253,8 @@ package object sttp { private[sttp] def codeIsSuccess(c: Int): Boolean = c >= 200 && c < 300 - private[sttp] def concatByteBuffers(bb1: ByteBuffer, bb2: ByteBuffer): ByteBuffer = + private[sttp] def concatByteBuffers(bb1: ByteBuffer, + bb2: ByteBuffer): ByteBuffer = ByteBuffer .allocate(bb1.array().length + bb2.array().length) .put(bb1) diff --git a/okhttp-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixHandler.scala b/okhttp-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixHandler.scala index 4ae0e33..1ffd372 100644 --- a/okhttp-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixHandler.scala +++ b/okhttp-handler/monix/src/main/scala/com/softwaremill/sttp/okhttp/monix/OkHttpMonixHandler.scala @@ -86,9 +86,9 @@ object OkHttpMonixHandler { private[monix] object TaskMonad extends MonadAsyncError[Task] { override def unit[T](t: T): Task[T] = Task.now(t) - override def map[T, T2](fa: Task[T], f: (T) => T2): Task[T2] = fa.map(f) + override def map[T, T2](fa: Task[T])(f: (T) => T2): Task[T2] = fa.map(f) - override def flatMap[T, T2](fa: Task[T], f: (T) => Task[T2]): Task[T2] = + override def flatMap[T, T2](fa: Task[T])(f: (T) => Task[T2]): Task[T2] = fa.flatMap(f) override def async[T]( diff --git a/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala b/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala index af44132..cef7054 100644 --- a/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala +++ b/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala @@ -89,11 +89,11 @@ abstract class OkHttpHandler[R[_], S](client: OkHttpClient) val code = res.code() val body = if (codeIsSuccess(code)) { - responseMonad.map(responseHandler(res).handle(responseAs, responseMonad), - Right(_: T)) + responseMonad.map(responseHandler(res).handle(responseAs, responseMonad))( + Right(_)) } else { - responseMonad.map(responseHandler(res).handle(asString, responseMonad), - Left(_: String)) + responseMonad.map(responseHandler(res).handle(asString, responseMonad))( + Left(_)) } val headers = res @@ -102,9 +102,7 @@ abstract class OkHttpHandler[R[_], S](client: OkHttpClient) .asScala .flatMap(name => res.headers().values(name).asScala.map((name, _))) - responseMonad.map( - body, - Response(_: Either[String, T], res.code(), headers.toList)) + responseMonad.map(body)(Response(_, res.code(), headers.toList)) } private def responseHandler(res: OkHttpResponse) = |