Skip to content

Instantly share code, notes, and snippets.

View andrewdbate's full-sized avatar

Andrew D Bate andrewdbate

View GitHub Profile
@travisbrown
travisbrown / MacroSAM.scala
Created March 6, 2013 19:52
Creating single abstract method class instances from function literals in Scala.
import scala.language.experimental.macros
import scala.language.higherKinds
import scala.reflect.macros.Context
object MacroSAM {
def sam[F[_, _], A, B](f: A => B) = macro sam_impl[F, A, B]
def sam_impl[F[_, _], A: c.WeakTypeTag, B: c.WeakTypeTag](c: Context)
(f: c.Expr[A => B])(implicit tag: c.WeakTypeTag[F[_, _]]) = {
import c.universe._