Skip to content

Instantly share code, notes, and snippets.

@Guvalif
Last active March 3, 2021 01:14
Show Gist options
  • Save Guvalif/f48352df147172b9de2a2a78373c9679 to your computer and use it in GitHub Desktop.
Save Guvalif/f48352df147172b9de2a2a78373c9679 to your computer and use it in GitHub Desktop.
// FP in Scala の map2 から apply (<*> 演算子) を導出する型パズル,スタート!
def map2[F[_], A, B, C](fa: F[A], fb: F[B])(f: (A, B) => C): F[C] = ???
// A に X => Y を代入
def map2[F[_], X => Y, B, C](fxy: F[X => Y], fb: F[B])(f: (X => Y, B) => C): F[C] = ???
// B に A を代入
def map2[F[_], X => Y, A, C](fxy: F[X => Y], fa: F[A])(f: (X => Y, A) => C): F[C] = ???
// C に B を代入
def map2[F[_], X => Y, A, B](fxy: F[X => Y], fa: F[A])(f: (X => Y, A) => B): F[B] = ???
// X に A を,Y に B を代入
def map2[F[_], A => B, A, B](fab: F[A => B], fa: F[A])(f: (A => B, A) => B): F[B] = ???
// f に eval(g, x) = g(x) をエンクロージングし、f を消去
def map2[F[_], A => B, A, B](fab: F[A => B], fa: F[A]): F[B] = ???
// 不要な型引数を消去し、カリー化
def apply[F[_], A, B](fab: F[A => B])(fa: F[A]): F[B] = ???
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment