Skip to content

Instantly share code, notes, and snippets.

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 / 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] {}
@gigiigig
gigiigig / pdt.scala
Created November 1, 2015 15:34
Path dependent types
trait Foo {
trait Bar
}
object FooImpl extends Foo {
object ABar extends Bar
object BBar extends Bar
}
@gigiigig
gigiigig / processes.scala
Last active October 5, 2015 06:52
Processes
import scalaz.concurrent.Task
import scalaz.concurrent.Strategy._
object console extends App {
object Process {
def liftOne[I,O](f: I => O): Process[I,O] = Await {
case Some(i) => Emit(f(i))
case None => Halt()
}
@gigiigig
gigiigig / freemonad.scala
Last active September 28, 2015 07:05
Free Monad
import scalaz._, Scalaz._
import scalaz.concurrent.Task
object console extends App {
trait Op[T]
case class Read[T](t: T) extends Op[T]
case class Write[T](t: T) extends Op[T]
type OpC[T] = Coyoneda[Op, T]
@gigiigig
gigiigig / hlistreverse.scala
Last active August 29, 2015 14:26
Implement HList reverse
import shapeless._
object console extends App {
trait Reverse[T <: HList] {
type Out <: HList
def reverse(t: T): Out
}
object Reverse {
@gigiigig
gigiigig / customhlist.scala
Last active August 29, 2015 14:26
Custom implementation of HList and print operation.
object foo extends App {
trait HList
trait HNil extends HList
case object HNil extends HNil {
def ::[H](h: H): H :: HNil = foo.::(h, HNil)
}
case class ::[H, T <: HList](h: H, t: T) extends HList { self =>
def ::[H](h: H) = foo.::(h, self)
@gigiigig
gigiigig / hlistprint.scala
Last active August 29, 2015 14:26
Add prin for HList, shows how to implement HList funtionalities
import shapeless._, record._, ops.record._ , syntax.singleton._, labelled._
object console extends App {
trait Print[T <: HList] {
def print(t: T): String
}
@gigiigig
gigiigig / checkfields.scala
Created July 31, 2015 15:54
Implicit proof that a case class contains certain fields
import shapeless._, record._, ops.record._ , syntax.singleton._, labelled._
object console extends App {
case class Foo(i: Int,s: String)
trait Check[L] extends SingletonProductArgs {
def applyProduct[T <: HList, LR <: HList]
(t: T)
(implicit
@gigiigig
gigiigig / auxpattern.scala
Last active November 11, 2023 05:22
Aux Pattern
import shapeless._
import scalaz._
import Scalaz._
object console extends App {
trait Foo[A] {
type B
def value: B