Skip to content

Instantly share code, notes, and snippets.

@squito
squito / gist:5921876
Created July 3, 2013 19:20
type variance & toMap
scala> trait A
defined trait A
scala>
scala> class B extends A
defined class B
scala> class C extends A
defined class C
trait ArraySummer[-T] {
def sum(t: T): Float
}
/** one TypeClass per concrete implementation */
object SpecificSummers {
implicit object SimpleWrappedFloatArraySummer extends ArraySummer[SimpleWrappedFloatArray] {
def sum(arr: SimpleWrappedFloatArray): Float = {
...
}
trait ArrayLike[@specialized T] {
def apply(idx: Int) : T
def update(idx: Int, value: T)
def length: Int
def size: Int = length
}
def sumArrayLike(arr: ArrayLike[Float]): Float = {
var idx = 0
var sum = 0f
val n = 1e7.toInt
val (rawArray, rawBB, rawFloatBuf) = initArrays(n)
println("result = " + th.pbench({
var idx = 0
var sum = 0f
while(idx < n) {
sum += rawArray(idx)
idx += 1
}
sum