, bu F[A] => F[B]
herhangi fonksiyonunu A => B
kaldırmak mümkündür.
F
, kullanılabilir bir functor örneğine sahipse, A => B => C => .. => Z
işlevini F[A] => F[B] => F[C] => .. => F[Z]
'a kaldırmak mümkündür. Esasen, uygulama functor keyfi aritme için functor bir genelleme.
here ve here numaralı bisikletçiler ve uygulayıcı bisikletçiler hakkında bilgi edinebilirsiniz. Bu fikirleri kapsayan this mükemmel konuşma da var.
Scalaz kütüphanesi bu soyutlamaları (ve daha fazlasını!) Sağlar.
import scalaz._
import Scalaz._
scala> val foo: Int => String = _.toString
foo: Int => String = <function1>
scala> foo.lift[Option]
res0: Option[Int] => Option[String] = <function1>
scala> res0(Some(3))
res1: Option[String] = Some(3)
scala> res0(None)
res2: Option[String] = None
scala> val add: (Int, Int) => Int = _ + _
add: (Int, Int) => Int = <function2>
scala> add.lift[Option]
res3: (Option[Int], Option[Int]) => Option[Int] = <function2>
scala> res3(Some(2), Some(1))
res4: Option[Int] = Some(3)
scala> res3(Some(2), None)
res5: Option[Int] = None
scala> res3(None, None)
res6: Option[Int] = None
Scalaz Function2
üzerinde lift
yöntemi pezevenkler, Function3
vb syntactially ağır oldukları curried fonksiyonları daha az kullanılmaktadır, çünkü. Sahne arkasında, kaldırma işlemi Function1
s ile gerçekleşir (örn. Curried işlevleri).
Ayrıca Scalaz source code'a da bakmak isteyebilirsiniz.
Bakmaya değer olabilir: http://blog.tmorris.net/lifting/ –
http://www.scala-lang.org/api/current/index.html#scala.Function2 adresine bakınız. , tupled fonksiyonu dikkat edin. Ayrıca http://www.scala-lang.org/api/current/index.html#scala.Function$ tupled ve untupled yöntemleri. – pedrofurla