Skip to content

Instantly share code, notes, and snippets.

View speedcom's full-sized avatar
🏠
Working from home

Mateusz Maciaszek speedcom

🏠
Working from home
View GitHub Profile
@speedcom
speedcom / Phantom-Types + F-bounded-types
Last active August 29, 2015 14:24
Scala Phantom-Types + F-bounded-types
// SCALA PHANTOM TYPES EXAMPLES
// 1 SIMPLE EXAMPLE
trait DoorStatus
trait DoorOpened extends DoorStatus
trait DoorClosed extends DoorStatus
case class Door[Status <: DoorStatus] private () {
def close[T >: Status <: DoorOpened](): Door[DoorClosed] = Door[DoorClosed]()
@speedcom
speedcom / Context Bound
Created July 4, 2015 12:35
Scala Context Bound Examples
trait Acceptable[T]
object Acceptable {
implicit object LongOK extends Acceptable[Long]
implicit object IntOK extends Acceptable[Int]
}
object A {
def f[T : Acceptable](t : T) = t
@speedcom
speedcom / Path-Dependent-Types
Last active August 29, 2015 14:24
Scala's Path-Dependent-Types
// 1 example
class A(name: String) {
case class B(nr: Int)
def add(first: B, second: B): Int = first.nr + second.nr
}
val a1 = new A(name = "first")
val a2 = new A(name = "second")
@speedcom
speedcom / Example.scala
Last active August 29, 2015 14:18 — forked from noelwelsh/Example.scala
error-handling-web-app
import scalaz.\/
import scalaz.syntax.either._
object Example2 {
// This example simulates error handling for a simple three tier web application
//
// The tiers are:
// - the HTTP service
// - a user authentication layer
// - a database layer
/**
* Part Zero : 10:15 Saturday Night
*
* (In which we will see how to let the type system help you handle failure)...
*
* First let's define a domain. (All the following requires scala 2.9.x and scalaz 6.0)
*/
import scalaz._
import Scalaz._