Scalaz 7 cómo utilizar Functor con Function1

Hola soy starsting para aprender Scalaz.

Quiero obtener una función y mapa sobre él con otra función.

aunque soy capaz de escribir esto:

import scalaz._, Scalaz._

import std.function._
import syntax.monad._

((x: Int) => x + 1) map {_ * 7}

y funciona, cuando uso el explícito appraoch como por los ejemplos de github del proyecto no funciona (ver más abajo)

import scalaz._, Scalaz._

import std.option._
import std.function._
import syntax.monad._

Functor[Function1[Int,Int]].map{x:Int => x * 4}{(x:Int) =>x * 7}

Hago como error

Error:(10, 17) Function1 toma dos parámetros de tipo, que se espera: un Functor[Función 1].mapa{x:Int => x * 4}{(x:Int) =>x * 7}

Hice inspirado a mí mismo a partir de un ejemplo en el doc que funciona

Functor[Option].map(Some("adsf"))(_.length)

1 Respuestas

  • Mario Galic
    4 de mayo de 2019

    Functor.aplicar a la firma se

    def apply[F[_]](implicit F: Functor[F]): Functor[F] = F
    

    donde veamos que toma un constructor de tipo F[_] en lugar de tipo de parámetro, por lo que tratamos de proporcionar ({type F[B] = Int => B})#F en lugar de Int => Int como

    Functor[({type F[B] = Int => B})#F].map((x: Int) => x * 4)((x: Int) => x * 7)