Size: a a a

Scala User Group

2020 March 02

ZH

Zeeshan Haider in Scala User Group
I am confused with defining custom Functors like RDD
источник

λ

λoλdog in Scala User Group
Firstly, try to ask your question in the different group -> https://t.me/scala_en
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
I want to create a custom functor for RDD
It's not possible directly, since RDD requires ClassTag for every operation
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
I want to create a custom functor for RDD
And Functor requires construction of F[B] from F[A] and A => B without any further information about B.
источник

λ

λoλdog in Scala User Group
Олег, ответь в соседний чат ему
источник

ZH

Zeeshan Haider in Scala User Group
Oleg ℕizhnik
It's not possible directly, since RDD requires ClassTag for every operation
OK any practice example?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
OK any practice example?
But you can do:
1. A wrapper for RDD that will accumulate mapping functions and can get back RDD only when you supply a ClassTag
2. Define your own "restricted" or "constrained" version of a functor typeclass. Something like

trait CFunctor[F[_], C[_]]{
   def cmap[A, B](fa: F[A])(f : A => B)( implicit ca: C[A],  cb: C[B]): F[B]
}
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
OK any practice example?
With further definitions

type Dummy[A] = A <:< Any

CFunctor[F, Dummy] will be equivalent to the ordinary  Functor[F]

and CFunctor[F, ClassTag] could be implemented for the RDD type constructor
источник

ZH

Zeeshan Haider in Scala User Group
so F[_], and C[_] are?
источник

ZH

Zeeshan Haider in Scala User Group
C[_] is a Custom type for RDD?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Regarding 1. there exists a type for that already:

https://typelevel.org/cats/api/cats/free/Coyoneda.html

Despite fancy name it's just am accumulator of map s
And can serve as wrapper, providing Functor for any type
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
C[_] is a Custom type for RDD?
C[_] - means "what implicit should I require to map"?

For the most of collections answer is "I don't need any implicit" and you can use the Dummy type above, since implicit value for it is guaranteed and cheap

For RDD answer is "a ClassTag"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Zeeshan Haider
so F[_], and C[_] are?
F - is your type constructor, i.e. "List", "Option", "RDD"
источник

ZH

Zeeshan Haider in Scala User Group
so here take one use case of RDD[String]
источник

ZH

Zeeshan Haider in Scala User Group
CFunctor[RDD[String], Dummy]
источник

ZH

Zeeshan Haider in Scala User Group
is it a proper way to use this
источник

Oℕ

Oleg ℕizhnik in Scala User Group
So you can define

CFunctor[List, Dummy]
CFunctor[Option, Dummy]
CFunctor[RDD, ClassTag]
CFunctor[TreeSet, Ordering]
источник

ZH

Zeeshan Haider in Scala User Group
CFunctor[RDD, String]
источник

ZH

Zeeshan Haider in Scala User Group
right
источник

ZH

Zeeshan Haider in Scala User Group
is one use case?
источник