Skip to content

Commit

Permalink
add TwitterPromiseFunctor
Browse files Browse the repository at this point in the history
  • Loading branch information
halcat0x15a committed Dec 26, 2011
1 parent d6f50a3 commit bd7145d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
4 changes: 3 additions & 1 deletion core/src/main/scala/twitter4z/exception/package.scala
Expand Up @@ -5,6 +5,8 @@ import Scalaz._

package object exception {

type TwitterResult[A] = ValidationNEL[TwitterException, A]
type TwitterExceptions = NonEmptyList[TwitterException]

type TwitterResult[A] = Validation[TwitterExceptions, A]

}
5 changes: 4 additions & 1 deletion core/src/main/scala/twitter4z/http/Http.scala
@@ -1,9 +1,12 @@
package twitter4z.http

import java.io._

import scalaj.http.{ Http => ScalajHttp, _ }

import scalaz._
import Scalaz._
import scalaj.http.{ Http => ScalajHttp, _ }
import scalaz.concurrent._

trait Http {

Expand Down
13 changes: 12 additions & 1 deletion core/src/main/scala/twitter4z/http/TwitterPromise.scala
Expand Up @@ -4,15 +4,26 @@ import scalaz._
import Scalaz._
import scalaz.concurrent._

import twitter4z.exception.TwitterExceptions

case class TwitterPromise[A](value: Promise[TwitterAPIResult[A]]) extends NewType[Promise[TwitterAPIResult[A]]]

object TwitterPromise {

def apply[A](result: TwitterAPIResult[A]): TwitterPromise[A] = TwitterPromise(promise(result))

implicit def TwitterPromiseFunctor = new Functor[TwitterPromise] {
def fmap[A, B](m: TwitterPromise[A], f: A => B): TwitterPromise[B] = TwitterPromise {
m.value.map {
case Success(a) => a.copy(value=f(a.value).value).success[TwitterExceptions]
case Failure(e) => e.fail[TwitterResponse[B]]
}
}
}

implicit def TwitterPromiseBind = new Bind[TwitterPromise] {
def bind[A, B](m: TwitterPromise[A], f: A => TwitterPromise[B]): TwitterPromise[B] = TwitterPromise {
m.value.flatMap {
m.value >>= {
case Success(a) => f(a.value).value
case Failure(e) => promise(e.fail[TwitterResponse[B]])
}
Expand Down
5 changes: 1 addition & 4 deletions tetris/src/main/scala/twitter4z/tetris/Tetris.scala
Expand Up @@ -70,10 +70,7 @@ object Tetris extends SimpleSwingApplication {
}
for {
statuses <- publicTimeline()
icons <- statuses.map(_.user.profile.imageURL).parMap(ImageIO.read(_))
} yield {
statuses.value.map(_.user.profile.imageURL).parMap(ImageIO.read)
}
} yield statuses.map(_.user.profile.imageURL).map(ImageIO.read(_))
}
}

Expand Down

0 comments on commit bd7145d

Please sign in to comment.