Free
के बाद से Scalaz 7.1.5 में एक इकाई के उदाहरण नहीं है, मैं उपयोगी विधि Applicative
, Apply
और इतने पर में परिभाषित का उपयोग नहीं कर सकते हैं।स्कालज़ 7.1.5 में मुफ़्त उदाहरण क्यों नहीं है?
/* ref - http://tpolecat.github.io/assets/sbtb-slides.pdf */
import Free._, Coyoneda._
type ResultSetIO[A] = FreeC[ResultSetOp, A]
val next : ResultSetIO[Boolean] = liftFC(Next)
def getString(index: Int): ResultSetIO[String] = liftFC(GetString(index))
def getInt(index: Int) : ResultSetIO[Int] = liftFC(GetInt(index))
def close : ResultSetIO[Unit] = liftFC(Close)
// compile errors
def getPerson1: ResultSetIO[Person] =
(getString(1) |@| getInt(2)) { Person(_, _)}
def getNextPerson: ResultSetIO[Person] =
next *> getPerson
def getPeople(n: Int): ResultSetIO[List[Person]] =
getNextPerson.replicateM(n) // List.fill(n)(getNextPerson).sequence
erorr संदेश है,
Error:(88, 19) value |@| is not a member of free.JDBC.ResultSetIO[String]
(getString(1) |@| getInt(2)) { Person(_, _)}
^
Error:(91, 10) value *> is not a member of free.JDBC.ResultSetIO[Boolean]
next *> getPerson
^
Error:(94, 19) value replicateM is not a member of free.JDBC.ResultSetIO[free.Person]
getNextPerson.replicateM(n) // List.fill(n)(getNextPerson).sequence
^
मैं Free
के लिए इकाई उदाहरण को लागू करना चाहिए?
implicit val resultSetIOMonadInstance = new Monad[ResultSetIO] {
override def bind[A, B](fa: ResultSetIO[A])(f: (A) => ResultSetIO[B]): ResultSetIO[B] =
fa.flatMap(f)
override def point[A](a: => A): ResultSetIO[A] =
Free.point[CoyonedaF[ResultSetOp]#A, A](a)
}
या, क्या मुझे कुछ याद आ रही है? (उदाहरण आयात)
ओह, और एक और: 4. वोट दें एसआई-5075, को याद करें, और इंतजार एक और चार या पांच साल ... –
विस्तृत विवरण और उपयोगी अन्य विकल्प के लिए धन्यवाद। मैं पहली बार चुनना चाहता हूं क्योंकि स्कालाज़ 7.2.एक्स में 'फ्रीसी' नहीं है। – 1ambda