Skip to content

Instantly share code, notes, and snippets.

@gigiigig
gigiigig / phantomtypes.scala
Created November 5, 2015 07:33
Phantom Types
object console extends App {
trait Op
trait Open extends Op
trait Close extends Op
trait Door[O <: Op]
object Door {
def apply[S <: Op] = new Door[S] {}
object console extends App {
trait Printer[T] {
def print(t: T): String
}
object Printer {
implicit val intPrinter: Printer[Int] = new Printer[Int] {
def print(i: Int) = s"$i: Int"
@gigiigig
gigiigig / caseclasscontains.scala
Last active November 11, 2015 17:36
Check if a case class contain another.
import shapeless._
import shapeless.record._
import shapeless.ops.hlist.Selector
object console extends App {
trait HListContains[T <: HList, R <: HList]
object HListContains {
import shapeless._
import shapeless.record._
import shapeless.ops.record._
import shapeless.ops.hlist._
object console extends App {
object sql {
@gigiigig
gigiigig / simplecomputation.scala
Last active January 25, 2016 22:55
First simple type computation
object console extends App {
trait Nat {
type Plus[That <: Nat] <: Nat
}
trait _0 extends Nat {
type Plus[That <: Nat] = That
}
trait Succ[N <: Nat] extends Nat {
type Plus[That <: Nat] = Succ[N#Plus[That]]
@gigiigig
gigiigig / caseclassequality.scala
Created February 19, 2016 10:49
Inheritance brake class eqaulity
trait Foo {
case class Bar(i: Int, s: String)
}
val fb1 = new Foo {}.Bar(3, "ciao")
val fb2 = new Foo {}.Bar(3, "ciao")
val equal = fb1 == fb2
println(s"equal: ${equal}") // equal: false
@gigiigig
gigiigig / dumbcinfig.scala
Last active March 2, 2016 11:17
Simple config example
trait Config {
val timeout: Int = 1
val interval: Int = 2
def wantToChangeThis: Int
}
object DefaultConfig extends Config {
val wantToChangeThis: Int = 34
}
import scalaz._
import Scalaz._
/** I think there are two use cases where implicits are very useful:
* TypeClasses
* Pimp or Rich pattern
*
* Let's start with typeclasses, probably the more popular,
* e.g. Collection library in Scala is all TC based, look for CanBuildFrom
*/
@gigiigig
gigiigig / # neovim - 2016-03-31_12-27-10.txt
Created March 31, 2016 11:38
neovim (neovim/neovim/neovim) on OS X 10.11.4 - Homebrew build logs
Homebrew build logs for neovim/neovim/neovim on OS X 10.11.4
Build date: 2016-03-31 12:27:10
scala> sealed trait Op
defined trait Op
scala> case class Foo(s: String) extends Op
defined class Foo
scala> case class Ciao(i: Int) extends Op
defined class Ciao
scala> case class Bar(op: Op, b: Boolean)