2011-08-18 8 views
5

मैं Scalaz में Traverse विशेषता में निम्नलिखित समारोह परिभाषा को समझने के लिए संघर्ष कर रहा हूँ:स्कालाज़ `एफ [_]: आवेदक प्रकार की बाधा कैसे अंतर्निहित मानकों का उपयोग करती है?

def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]

हिस्सा मुझे समझ नहीं आता F[_] : Applicative है। , traverse कुछ प्रकार F के लिए काम करने के लिए, एक दायरे में प्रकार Applicative[F] का एक अंतर्निहित वस्तु लाने के लिए की जरूरत है

trait Applicative[Z[_]] extends Pointed[Z] with Apply[Z] { 
    override def fmap[A, B](fa: Z[A], f: A => B): Z[B] = this(pure(f), fa) 
    override def apply[A, B](f: Z[A => B], a: Z[A]): Z[B] = liftA2(f, a, (_:A => B)(_: A)) 
    def liftA2[A, B, C](a: Z[A], b: Z[B], f: (A, B) => C): Z[C] = apply(fmap(a, f.curried), b) 
} 

यहाँ:

अब, चलो देखते हैं कि क्या Applicative है करते हैं।

मैं कई बातें समझने के लिए करना चाहते हैं:

  1. वाट बिल्कुल F[_] : Applicative मतलब है?
  2. F[_]Applicative के साथ कुछ करने के लिए क्यों है? हमें Applicative[F] की आवश्यकता है, एफ [कुछ] लागू नहीं है?
  3. यह विधि अंतर्निहित पैरामीटर घोषित किए बिना Applicative[F] के अंतर्निहित मूल्यों का उपयोग क्यों करती है?

उत्तर

6

मुझे लगता है कि सभी तीन प्रश्नों के तथ्य यह है कि इस अंकन के साथ उत्तर दिया जा सकता है:

def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]] 

इस के बराबर है:

def traverse[F[_], A, B](f: A => F[B], t: T[A])(implicit $ev: Applicative[F]): F[T[B]] 

पहले अंकन एक F[_] के लिए context bound रूप में जाना जाता ।

+0

आह, तो यह ** ** एक विशेष भाषा सुविधा है! धन्यवाद! – Rotsor

संबंधित मुद्दे