यहां उदाहरण के रूप में दो लाभ हैं-मुझे यकीन है कि आप दूसरों के साथ आ सकते हैं।
सबसे पहले, यह Kleisli[M, ?, ?]
और ? => ?
जैसे विभिन्न तीरों पर सार के लिए उपयोगी हो सकता है। उदाहरण के लिए, मैं एक सामान्य कार्य लिख सकता हूं जो एक निश्चित समय पर एंडोमोर्फिज्म लागू करेगा।
def applyX10[Arr[_, _]: Category, A](f: Arr[A, A]) =
List.fill(10)(Endomorphic(f)).suml
अब मैं इसका उपयोग उदाहरण पर कर सकता हूं Int => Int
या Kleisli[Option, Int, Int]
:
val f = (_: Int) + 1
val k = Kleisli.kleisli[Option, Int, Int] {
case i if i % 2 == 0 => Some(i * 3)
case _ => None
}
और फिर: (। ध्यान दें कि A =?> B
सिर्फ Kleisli[Option, A, B]
के लिए एक उपनाम है)
scala> applyX10(f).run(1)
res0: Int = 11
scala> applyX10[=?>, Int](k).run(2)
res1: Option[Int] = Some(118098)
दूसरा, तथ्य यह है Kleisli[F, ?, ?]
अगर F
करता है एक इकाई उदाहरण है भी उपयोगी हो सकता है। उदाहरण के लिए my answer here देखें कि आप ReaderT
के साथ मोनैडिक संरचना का उपयोग कैसे कर सकते हैं, जो Kleisli
के लिए केवल एक उपनाम है।
स्रोत
2015-03-14 18:10:02
धन्यवाद। मैं निम्नानुसार _grok_ करने की कोशिश करूंगा: (1) 'क्लेस्ली' सामान्य रूप से अलग-अलग तीरों (2) विशेष मामलों पर एक अमूर्तता के रूप में: उदा। 'रीडर टी', रीडर मोनड, आदि – Michael
ठीक है, एक मोनड 'एम' के लिए, 'क्लेस्ली [एम,?,?] '_an_ तीर है। –
समझ गया। धन्यवाद, – Michael