Skip to content

Instantly share code, notes, and snippets.

@gseitz
gseitz / project_build.scala
Created September 19, 2011 22:01
mini sbt-protobuf-scalabuf setup
import sbt._
import Keys._
import ProtobufPlugin._
object build extends Build {
// ... the usual project setup stuff thingly
settings = Defaults.defaultSettings ++ protobufSettings ++ Seq(
scalaSource in protobufConfig <<= (sourceDirectory)(_ / "generated_scala")
)
}
@gseitz
gseitz / lensed.scala
Created September 24, 2011 12:59 — forked from retronym/lensed.scala
Lensed
// see https://github.com/gseitz/Lensed
object Lensed {
import scalaz._
import Scalaz._
case class Address(street: String, number: Int)
case class Person(name: String, address: Address)
➜ ~/.ivy2/cache/org.scalaz/scalaz-core_2.9.0-1/jars scala -cp scalaz-core_2.9.0-1-6.0.1.jar
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import scalaz._
import scalaz._
scala>
@gseitz
gseitz / ActorMetrics.scala
Created October 3, 2011 05:38
Trait for exposing metrics for akka-actors.
import akka.actor.Actor
import com.yammer.metrics.Instrumented
// Useful for monitoring the mailbox size of actors.
// Just fire up your favorite JMX client and watch the pretty graph (which hopefully is a flatline at 0).
trait ActorMetrics extends Instrumented { actor: Actor =>
metrics.gauge("mailbox size", self.id){actor.self.dispatcher.mailboxSize(actor.self)}
}
"FingerTree" should {
"apply effects in order" in {
import std.string._
import Id._
type StringWriter[A] = Writer[String, A]
val s: Writer[String, FingerTree[Int, Int]] = streamToTree(intStream.take(5)).traverseTree[StringWriter, Int, Int](x => Writer(x.toString, x))
val (w, a) = s.runT
(w, a.toStream) must be_===("12345", streamToTree(intStream.take(5)).toStream)
}
}
@gseitz
gseitz / BuildSettings.scala
Created December 5, 2011 20:00
SBT resource handling for wicket
import sbt._
import Keys._
//import com.github.siasia.WebPlugin
object BuildSettings {
// generic filter settings, need to be applied for Compile and Test
def wicketResourceSettings(config: Configuration) = inConfig(config)(Seq[Setting[_]](
excludeFilter in unmanagedResources := ("*.java"),
unmanagedResourceDirectories <++= (unmanagedSourceDirectories) apply (identity)
@gseitz
gseitz / gist:2306504
Created April 4, 2012 23:20
polyparse.scala
scala> val pair = for {
| _ <- token(char('{'))
| id <- token(ident)
| _ <- token(char(':'))
| v <- integer
| _ <- token(char('}'))
| } yield id -> v
obj: scalaz.parse.huttonmeijer.Parser[(List[Char], Int)] = scalaz.parse.huttonmeijer.Parser$$anon$2@234e7730
scala> pair("{ foo : 17 }".toList)
trait PolyParse[F[_]] {
def F: Functor[F]
def APP: Applicative[F]
def ALT: Alternative[F]
def C: Commitment[F]
def M: MonadFail[F]
}
def oneOf[FA](fas: List[FA])(implicit U: Unapply[PolyParse, FA]): U.M[U.A] = fas match {
case Nil => U.TC.M.fail[U.A]("failed to parse any of the possible choices".toList)
@gseitz
gseitz / gist:2427142
Created April 20, 2012 08:33
Some /== Option leads to a compiler error
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> Option(17) match {
| case opt @ Some(_) if opt /== Option(42) =>
| }
<console>:48: error: type mismatch;
@gseitz
gseitz / ApplicativePlus.scala
Created April 29, 2012 18:51
trying to unbork ApplicativePlus.{some, many}
// original, broken version
def many[A](a: F[A]): F[List[A]] = {
lazy val y: Free.Trampoline[F[List[A]]] = z map (plus(_, point(Nil)))
lazy val z: Free.Trampoline[F[List[A]]] = y map (map2(a, _)(_ :: _))
y.run
}
// trying to make sense of trampoline