Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Richard Dallaway @d6y www.underscoreconsulting.com Let the type system do it for you
Slide 2
Slide 2 text
csv( List("Date","Ratio X"), List("Mon","6") :: List("Tue","-2") :: Nil ) Date Ratio X Mon 6 Tue -2
Slide 3
Slide 3 text
csv( List("Date" ), List("Mon","6") :: List("Tue","-2") :: Nil ) Oops and so… ? Date Mon 6 Tue -2
Slide 4
Slide 4 text
def csv( hdrs: Seq[String], rows: List[Seq[String]]) : String = ...
Slide 5
Slide 5 text
def csv( hdrs: Seq[String], rows: List[Seq[String]]) : String = ... import shapeless._ import syntax.sized._
Slide 6
Slide 6 text
def csv[N <: Nat]( hdrs: Seq[String], rows: List[Seq[String]]) : String = ... import shapeless._ import syntax.sized._
Slide 7
Slide 7 text
def csv[N <: Nat]( hdrs: Sized[Seq[String], N], rows: List[Seq[String]]) : String = ... import shapeless._ import syntax.sized._
Slide 8
Slide 8 text
def csv[N <: Nat]( hdrs: Sized[Seq[String], N], rows: List[Sized[Seq[String], N]]) : String = ... import shapeless._ import syntax.sized._
Slide 9
Slide 9 text
csv( Sized("Date","Ratio X"), Sized("Mon","6") :: Sized("Tue","-2") :: Nil ) Date Ratio X Mon 6 Tue -2
Slide 10
Slide 10 text
csv( Sized("Date" ), Sized("Mon","6") :: Sized("Tue","-2") :: Nil ) Type mismatch at compile time found: Sized[IndexedSeq[String],shapeless.nat._1] required: Sized[Seq[String],Succ[_ >: shapeless.nat._1 ...] Oops
Slide 11
Slide 11 text
class SizedOps[A, Repr, N <: Nat] ... { def head(implicit ev : _0 < N) : A = r.head def tail(implicit pred : Pred[N]) = wrap[Repr, pred.Out](r.tail) ... }
Slide 12
Slide 12 text
@d6y www.underscoreconsulting.com Less code Clearer intent Summary