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 을 헷갈리지 말자 - 참고