scala/scala3

type lambdas

wefree 2024. 4. 23. 14:55
object Test {
  type MyList[A] = List[A]
  type MyListV2 = [A] =>> List[A]

  type MyMap[K, V] = Map[K, V]
  type MyMapV2 = [K, V] =>> Map[K, V]

  class Functor[F[_]]
  type MyFunctor[F[_]] = Functor[F]
  type MyFunctorV2 = [F[_]] =>> Functor[F]

  trait Monad[M[_]] {
    def flatMap[A, B](fa: M[A])(f: A => M[B]): M[B]
  }
  class ZIO[R, E, A]
  class ZIOMonad[R, E] extends Monad[[A] =>> ZIO[R, E, A]] {
    override def flatMap[A, B](fa: ZIO[R, E, A])(f: A => ZIO[R, E, B]): ZIO[R, E, B] = ???
  }

  def main(args: Array[String]): Unit = {
    val x : MyListV2[Int] = List(3)
  }
}

 

 

주의: type lambdas 와 polymorphic function types 을 헷갈리지 말자 - 참고