Scala Implicits compilation error -


i wrote code

case class foo(x: int) case class bar(y: int) object foo {     implicit def tobar(f: foo) : bar = { bar(f.x) }     implicit def tobarlist(fl: list[foo]) : list[bar] = {fl.map{x: bar => x}} 

the tobarlist function doesn't compile.

<console>:17: error: type mismatch;  found   : bar => bar  required: foo => ?        implicit def tobarlist(fl : list[foo]) : list[bar] = { fl.map{x : bar => x}} 

however shouldn't implicits system kick in here? meaning compiler should detect there error function expects bar passing foo. there implicit function in scope converts foo bar, should used , things should work.

so why did not compile?

map ordinary method takes function argument, , map on list[foo] requires function foo. you've provided function bar—specifically bar => bar—but having implicit conversion foo bar doesn't mean have 1 bar => bar foo => bar (which method needs).

if want work you'll either need provide function foo , apply conversion (either explicitly or implicitly), or you'll need provide implicit conversion bar => bar foo => bar (similar 1 you're trying provide list[foo] list[bar], conversion happening in other direction, since function1 contravariant in first argument while list covariant).

(this bad idea, though.)


Comments

Popular posts from this blog

angular - Is it possible to get native element for formControl? -

unity3d - Rotate an object to face an opposite direction -

javascript - Why jQuery Select box change event is now working? -