Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save janekdb/608b8849ac3cf300f8671d1e3b33e084 to your computer and use it in GitHub Desktop.
Save janekdb/608b8849ac3cf300f8671d1e3b33e084 to your computer and use it in GitHub Desktop.
Scala Type Level Programming: The Natural Numbers: Multiplication
sealed trait Nat {
type mult[That <: Nat] <: Nat
}
sealed trait MsbZero extends Nat {
override type mult[That <: Nat] = MsbZero
}
sealed trait MsbOne extends Nat {
override type mult[That <: Nat] = That
}
sealed trait B0[HigherBits <: Nat] extends Nat {
override type mult[That <: Nat] = HigherBits#mult[That]#dbl
}
sealed trait B1[HigherBits <: Nat] extends Nat {
override type mult[That <: Nat] = HigherBits#mult[That]#dbl#add[That]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment