File: t4692.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (27 lines) | stat: -rw-r--r-- 910 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class TypeAliasVsImplicitTest {

    class For[m[_], a](x: m[a]) {
       def map[b](y: a => b): m[b] = throw new Error
    }
    implicit def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)

    trait MyList[A]

    def foo(xs: MyList[Int]) = xs.map(x => x) // compiles fine.

    type MyListOfInt = MyList[Int]
    def bar(xs: MyListOfInt) = xs.map(x => x) // doesn't compile: value map is not a member of TypeAliasVsImplicitTest.this.MyListOfInt
}

// minimal case -- the bug was in type constructor inference where `xs.type` needed to be widened *and* dealiased
// in 2.8.1 implicit conversion search started with a widened type, so that combo never came up
// object Test {
//   class For[m[_], a](x: m[a])
//   def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)
//
//   trait MyList[A]
//   type MyListOfInt = MyList[Int]
//
//   val xs: MyListOfInt = error("")
//   toFor(xs : xs.type)
// }