Closed
Description
Compiler version
Scala compiler version 3.1.3 -- Copyright 2002-2022, LAMP/EPFL
Scala compiler version 3.2.1-RC1-bin-SNAPSHOT-git-456444b -- Copyright 2002-2022, LAMP/EPFL
Minimized code
import scala.language.implicitConversions
object Test extends App {
class Foo {
class Bar {
override def toString() = "bar"
}
object Bar {
implicit def fromString(a: String): Bar = { println("convert bar") ; new Bar }
}
def andThen_:(b: Bar) = { println("pre") ; println(s"use $b") ; println("post") }
def andThenByName_:(b: => Bar) = { println("pre") ; println(s"use $b") ; println(s"use $b") ; println("post") }
}
def mkFoo: Foo = { println("foo") ; new Foo }
def mkBarString: String = { println("bar"); "Bar" }
mkBarString andThen_: mkFoo
println()
mkFoo.andThen_:(mkBarString)
println()
mkBarString andThenByName_: mkFoo
println()
mkFoo.andThenByName_:(mkBarString)
}
Output
-- [E007] Type Mismatch Error: test/files/run/t4225e.scala:20:2 --------------------------------------------------------------------------
20 | mkBarString andThen_: mkFoo
| ^^^^^^^^^^^
| Found: String
| Required: Nothing
|
| longer explanation available when compiling with `-explain`
-- [E007] Type Mismatch Error: test/files/run/t4225e.scala:24:18 -------------------------------------------------------------------------
24 | mkFoo.andThen_:(mkBarString)
| ^^^^^^^^^^^
| Found: String
| Required: Nothing
|
| longer explanation available when compiling with `-explain`
-- [E007] Type Mismatch Error: test/files/run/t4225e.scala:28:2 --------------------------------------------------------------------------
28 | mkBarString andThenByName_: mkFoo
| ^^^^^^^^^^^
| Found: String
| Required: Nothing
|
| longer explanation available when compiling with `-explain`
-- [E007] Type Mismatch Error: test/files/run/t4225e.scala:32:24 -------------------------------------------------------------------------
32 | mkFoo.andThenByName_:(mkBarString)
| ^^^^^^^^^^^
| Found: String
| Required: Nothing
|
| longer explanation available when compiling with `-explain`
From -Vprint:typer
def mkBarString: String =
{
println("bar")
"Bar"
}
{
val b$1: <error Found: String
Required: Nothing> = mkBarString
Test.mkFoo.andThen_:(b$1)
}
println()
Test.mkFoo.andThen_:(mkBarString)
println()
Test.mkFoo.andThenByName_:(mkBarString)
println()
Test.mkFoo.andThenByName_:(mkBarString)
Expectation
Successful compilation of Scala 2 test test/files/run/t4225e.scala