I've been checking Atlassian Typeclassopedia for Scala (examples using Scalaz) and I don't understand the function monad definition (I've never seen such syntax for type parameters):
implicit def FunctionMonad[R] = new Monad[({type l[a] = R=>a})#l] {
def >>=[A, B](fa: R => A)(f: A => R => B) : R => B = (x => f(fa(x))(x))
...
}
Could someone please elaborate on what {type l[a] = R=>a})#l
actually does?