This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This code is unsafe to use in a multithreaded environment. | |
object A { | |
def foo = "foo" | |
B.bar | |
} | |
object B { | |
def bar = "bar" | |
A.foo |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package demo | |
trait Bar | |
abstract class Foo[T] {} | |
object Foo { | |
implicit def FooFromBar[T <: Bar : Manifest]: Foo[T] = new Foo[T] { } | |
def apply[T : Foo] = implicitly[Foo[T]] | |
def baz[T : Foo](arg: T): Unit = { println("ha!")} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type ¬[A] = A => Nothing | |
type ∨[T, U] = ¬[¬[T] with ¬[U]] | |
type ¬¬[A] = ¬[¬[A]] | |
type |∨|[T, U] = { type λ[X] = ¬¬[X] <:< (T ∨ U) } | |
class FoldUnion[T](t: T) { | |
def boxClass(x: java.lang.Class[_]): java.lang.Class[_] = x.toString match { | |
case "byte" => manifest[java.lang.Byte].erasure | |
case "char" => manifest[java.lang.Character].erasure | |
case "short" => manifest[java.lang.Short].erasure |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sbt._ | |
class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) { | |
val liftVersion = "2.3" | |
val liftWebkit = "net.liftweb" %% "lift-webkit" % liftVersion % "compile" | |
val liftMapper = "net.liftweb" %% "lift-mapper" % liftVersion % "compile" | |
val jetty = "org.mortbay.jetty" % "jetty" % "6.1.22" % "test" | |
val junit = "junit" % "junit" % "4.5" % "test" | |
val logback = "ch.qos.logback" % "logback-classic" % "0.9.26" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.mongodb._ | |
import org.bson.types.ObjectId | |
trait MongoDynamic extends Dynamic { | |
def applyDynamic(name: String)(args: Any*): MongoDynamic | |
def expand[A : Manifest]: Option[A] | |
} | |
object EmptyMongoDynamic extends MongoDynamic { | |
override def applyDynamic(name: String)(args: Any*): MongoDynamic = EmptyMongoDynamic |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Usage: | |
// p(instance)('privateMethod)(arg1, arg2, arg3) | |
class PrivateMethodCaller(x: AnyRef, methodName: String) { | |
def apply(_args: Any*): Any = { | |
val args = _args.map(_.asInstanceOf[AnyRef]) | |
def _parents: Stream[Class[_]] = Stream(x.getClass) #::: _parents.map(_.getSuperclass) | |
val parents = _parents.takeWhile(_ != null).toList | |
val methods = parents.flatMap(_.getDeclaredMethods) | |
val method = methods.find(_.getName == methodName).getOrElse(throw new IllegalArgumentException("Method " + methodName + " not found")) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The way Scala for-comprehensions work is that: | |
for (x <- c) f(x) | |
// simply translates to: | |
c.foreach(x => f(x)) | |
// Likewise: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object AuthenticatedSession extends Loggable { | |
def logIn(credentialsOption: Option[Credentials]): Twitter = { | |
val (tw, credentials) = credentialsOption match { | |
case Some(cr) => | |
(createTwitter(Some(cr)), cr) | |
case None => | |
val twitter = createTwitter(None) | |
val requestToken = twitter.getOAuthRequestToken | |
DesktopUtil.browse(requestToken.getAuthorizationURL) | |
(twitter, Dialog.showInput(null, "Enter the PIN from the Twitter authorization page in your browser", |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class DynamicImpl(x: AnyRef) extends Dynamic { | |
def _select_(name: String): DynamicImpl = { | |
new DynamicImpl(x.getClass.getMethod(name).invoke(x)) | |
} | |
def _invoke_(name: String)(args: Any*) = { | |
new DynamicImpl(x.getClass.getMethod(name, args.map(_.asInstanceOf[AnyRef].getClass) : _*).invoke(x, args.map(_.asInstanceOf[AnyRef]) : _*)) | |
} | |
override def typed[T] = x.asInstanceOf[T] | |
override def toString = "Dynamic(" + x.toString + ")" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
scala> object Foo | |
defined module Foo | |
scala> val x = Foo | |
x: Foo.type = Foo$@24753433 | |
scala> val y = identity(Foo) | |
y: object Foo = Foo$@24753433 |