alternative to breakOut that is less verbose
scala
Solution
This will not work for `String` or `Map`. Also this code requires `scala.language.higherKinds`:
import collection.generic.CanBuildFrom
import collection.breakOut
class Build[To[_]]
def build[To[_]] = new Build[To]
implicit def buildToCbf[From, T, To[_]](b: Build[To])
(implicit cbf: CanBuildFrom[Nothing,T,To[T]]): CanBuildFrom[From,T,To[T]] =
collection.breakOut
List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(build[Array])
//res0: Array[(Int, Double, String)] = Array((2,0.5,1), (4,1.0,2), (6,1.5,3))
Problem
breakOut is nice, but too verbose: ``` List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(breakOut) : Array[(Int, Double, String)] ``` I don't want to specify the element type. I want something like: ``` List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(build[Array]) ``` I can write a `buildArray` easily, but then I'd need a buildSet, buildList, etc. So I want something generic. Extra points ( ;-) ) if you can make it work for Map (using the same name `build`, not build2 or buildMap)