Skip to content

Instantly share code, notes, and snippets.

View fiadliel's full-sized avatar

Gary Coady fiadliel

View GitHub Profile
@fiadliel
fiadliel / Example.scala
Created August 20, 2014 10:50
Typeclass pattern using Scala implicit classes
package typeclass_example
case class Example(a: Int, b: String)
### Keybase proof
I hereby claim:
* I am fiadliel on github.
* I am fiadliel (https://keybase.io/fiadliel) on keybase.
* I have a public key whose fingerprint is BABC C4C8 109D 001F 81E4 A7DB 13BB D061 3BB9 93C4
To claim this, I am signing this object:
import org.scalatest._
class AllSuites extends Suites(
new FailureSuite,
new SuccessSuite
)
class FailureSuite extends FlatSpec {
"1" should "equal 2" in {
assert(1 === 2)
implicit class Task2FutureWrapper[A](task: scalaz.concurrent.Task[A]) {
import scala.concurrent.{Future, Promise}
import scalaz.{-\/,\/-}
def runFuture(): Future[A] = {
val p = Promise[A]()
task.runAsync {
case -\/(t) => p.failure(t)
@fiadliel
fiadliel / gist:597c9a859682fb42747c
Last active August 29, 2015 14:24
Paged API requests for scalaz-stream
case class Response(results: Seq[String], nextPage: Option[Int])
def getPagedUrl(url: String, curPage: Option[Int]): Task[Response] = ???
def pagedRequest(url: String, curPage: Option[Int] = None): Process[Task, String] = {
Process.eval(getPagedUrl(url, curPage)) flatMap { response =>
Process.emitAll(response.results) ++
response.nextPage.map(p => pagedRequest(url, Some(p))).getOrElse(Process.empty)
}
}
@fiadliel
fiadliel / QueueOutputStream.scala
Last active August 29, 2015 14:26
OutputStream that writes to a scalaz-stream mutable Queue
import java.io.OutputStream
import scalaz.stream._
import scodec.bits.ByteVector
class QueueOutputStream(q: async.mutable.Queue[ByteVector]) extends OutputStream {
override def write(b: Int): Unit =
q.enqueueOne(ByteVector(b & 0xff)).run
@fiadliel
fiadliel / OutputStreamUtils.scala
Last active August 29, 2015 14:26
Wrapper to create an outToSource function
object OutputStreamUtils {
def outToSource(queueSize: Int)(f: OutputStream => Unit)(implicit S: Strategy): Process[Task, ByteVector] = {
val queue = async.boundedQueue[ByteVector](queueSize)
val qos = new QueueOutputStream(queue)
S(f(qos))
queue.dequeue
}
}
scala> import Implicits._
import Implicits._
scala> FirstEvent("hello")
res0: FirstEvent = FirstEvent(hello)
scala> res0.handle
res1: String = hello
scala> ThirdEvent("hello")
@fiadliel
fiadliel / ServerSentEvents.scala
Last active August 29, 2015 14:28
Retrying on error...
import com.ning.http.client._
import com.typesafe.scalalogging.StrictLogging
import scodec.bits.ByteVector
import scala.concurrent.duration._
import scalaz._
import scalaz.Scalaz._
import scalaz.concurrent.Task
import scalaz.stream._
@fiadliel
fiadliel / ZipReader.scala
Created August 30, 2015 23:23
Reading Zip files with scalaz-stream
import java.io.{File, FileNotFoundException, IOException, InputStream}
import java.util.zip.{ZipEntry, ZipException, ZipFile}
import org.http4s.DateTime
import scodec.bits.ByteVector
import scalaz._
import scalaz.Scalaz._
import scalaz.concurrent.Task