Skip to content

Commit cc7fec3

Browse files
committed
ignore Extension flag, suspend unpickling Monad
1 parent 28e459e commit cc7fec3

File tree

7 files changed

+43
-4
lines changed

7 files changed

+43
-4
lines changed

src/compiler/scala/tools/nsc/tasty/TreeUnpickler.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ abstract class TreeUnpickler(reader: TastyReader,
796796
val localCtx = localContext(sym)
797797
val noCycle = tag match {
798798
case DEFDEF =>
799-
assertTasty(!completer.tastyFlagSet, s"unsupported flags on def: ${completer.tastyFlagSet.show}")
799+
assertTasty(!(completer.tastyFlagSet &~ Extension), s"unsupported flags on def: ${completer.tastyFlagSet.show}")
800800
val tparams = readParams[NoCycle](TYPEPARAM)(localCtx)
801801
val vparamss = readParamss(localCtx)
802802
val tpt = readTpt()(localCtx)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package tastytest
22

3-
trait Functor[F[_]] { def map[A,B](fa: F[A])(f: A => B): F[B] }
3+
trait Functor[F[_]] { def (fa: F[A]) map[A,B](f: A => B): F[B] }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package tastytest
22

3-
trait FunctorI[F[_ <: Int]] { def map[A <: Int, B <: Int](fa: F[A])(f: A => B): F[B] }
3+
trait FunctorI[F[_ <: Int]] { def (fa: F[A]) map[A <: Int, B <: Int](f: A => B): F[B] }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package tastytest
22

3-
trait FunctorL[F[_] <: List[_]] { def map[A,B](fa: F[A])(f: A => B): F[B] }
3+
trait FunctorL[F[_] <: List[_]] { def (fa: F[A]) map[A,B](f: A => B): F[B] }
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package tastytest
2+
3+
trait Monad[F[_]] extends Functor[F] {
4+
def pure[A](x: A): F[A]
5+
def (fa: F[A]) flatMap [A,B](f: A => F[B]): F[B]
6+
def (fa: F[A]) map [A,B] (f: A => B) = flatMap(fa)(f `andThen` pure)
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package tastytest
2+
3+
trait Reader[Ctx] extends Monad[[X] =>> Ctx => X] {
4+
def (r: Ctx => A) flatMap[A, B](f: A => Ctx => B): Ctx => B =
5+
ctx => f(r(ctx))(ctx)
6+
def pure[A](x: A): Ctx => A =
7+
ctx => x
8+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package tastytest
2+
3+
object TestFunctor {
4+
5+
implicit object ListMonad extends Monad[List] {
6+
7+
def flatMap[A, B](fa: List[A])(f: A => List[B]): List[B] = fa.flatMap(f)
8+
def pure[A](x: A): List[A] = x :: Nil
9+
10+
// error: Missing implementation for:
11+
// def map[A, B](fa: Monad.this.F[A])(f: A => B): Monad.this.F[B] // inherited from trait Functor
12+
override def map[A, B](fa: List[A])(f: A => B): List[B] = fa.map(f)
13+
14+
}
15+
16+
def pureToString[F[_], A](fa: F[A])(implicit F: Monad[F]): F[String] = F.flatMap(fa)(a => F.pure(a.toString))
17+
18+
def test1 = assert(pureToString(List(1,2,3)) === List("1","2","3"))
19+
20+
def main(args: Array[String]): Unit = {
21+
test1
22+
println("Suite passed!")
23+
}
24+
}

0 commit comments

Comments
 (0)