Skip to content

Instantly share code, notes, and snippets.

View ghik's full-sized avatar

Roman Janusz ghik

View GitHub Profile
@ghik
ghik / selftyped.scala
Last active August 29, 2015 13:56
Non-singleton self-types in Scala
// full implementation at https://github.com/ghik/selftyped
trait Base extends SelfTyped {
def same[T: Self]: T
def twice[T: Self]: T
}
trait SimpleSame extends Base {
// we can always safely return 'this' where self-type is expected
@ghik
ghik / stackable.scala
Created April 21, 2014 07:38
Stackable traits example
class Base {
def work() {
// do some work
}
}
trait Logging extends Base {
override def work() {
log("Doing work")
super.work()
@ghik
ghik / Opt.scala
Created April 20, 2015 15:10
Option as value class in Scala
import scala.language.implicitConversions
final class Opt[+A] private(private val value: Any) extends AnyVal {
def isEmpty = value == null
def isDefined: Boolean = !isEmpty
def get: A = value.asInstanceOf[A]
}
@ghik
ghik / PROFIT.scala
Created April 24, 2015 10:26
String interpolation + pattern matching = PROFIT
import RegexInterpolations._
val str = "My hovercraft is full of eels"
str match {
case r"""My (\w+)$vehicle is full of (\w+)$stuff""" =>
println(s"It is $stuff that my $vehicle is full of.")
}
@ghik
ghik / BIgMac.scala
Last active August 29, 2015 14:19 — forked from anonymous/BIgMac.scala
import hoconspring.HoconType
import scala.language.experimental.macros
import scala.reflect.macros.blackbox
object BigMac {
def materializeHoconType[T]: HoconType[T] = macro materializeHoconType_impl[T]
def materializeHoconType_impl[T: c.WeakTypeTag](c: blackbox.Context): c.Expr[HoconType[T]] = {
import c.universe._
@ghik
ghik / nothing.scala
Last active September 7, 2015 19:45
Nothing to see here
scala> type AbsolutelyNothing = Nothing { type MoreNothing = Nothing }
defined type alias AbsolutelyNothing
scala> typeOf[Nothing] <:< typeOf[AbsolutelyNothing]
res0: Boolean = true
scala> typeOf[AbsolutelyNothing] <:< typeOf[Nothing]
res1: Boolean = true
scala> typeOf[Nothing] =:= typeOf[AbsolutelyNothing]
package com.avsystem.commons
package misc
import org.scalatest.FunSuite
/**
* Author: ghik
* Created: 23/11/15.
*/
class SamTest extends FunSuite {
import org.scalatest.FunSuite
import scala.language.higherKinds
/**
* Author: ghik
* Created: 26/11/15.
*/
class DelegationTest extends FunSuite {
trait Destination[T] {
sealed trait Zapieczętowany {
def accept[T](forPrzypadek: JFunction[Przypadek,T], forNieSądzę: JFunction[NieSądzę,T]): T = this match {
case p: Przypadek => forPrzypadek(p)
case ns: NieSądzę => forNieSądzę(ns)
}
}
case class Przypadek() extends Zapieczętowany
case class NieSądzę() extends Zapieczętowany
import scala.language.higherKinds
sealed abstract class Stuff[+A]
case class Suspend[A](a: () => mutable.Set[A])
extends Stuff[A]
def extract[A](source: Stuff[A]): Suspend[A] =
source match {
case ref @ Suspend(_) => ref