سؤال

كنت انظر إلى scalaz ورؤية أن معظم الموناد لديهم القدرة على أن تكون اجتاز List, Option, Identity وما إلى ذلك وتتساءل عما إذا كان هذا يعني أن كل كائن يمكن اجتيازه يمكن أن يكون له تسلسل أيضًا انصح.

إذا كان هذا هو الحال في الواقع (يمكن أن أكون مخطئًا بالفعل) ، فما هو ناتج أ Identity فمثلا:

Identity(Option(1)) سوف يصبح هذا Option(Identity(1))؟ أو هل أفتقد شيئًا ما ، إذا كان هذا هو الحال ، فستكون أي مؤشرات مفيدة للغاية.

يحرر

في الواقع ، كنت على صواب بشأن تسلسل الهوية هو ما يلي:

Identity(Option(1)) لا يصبح بالفعل Option(Identity(1)). لذلك يتم تسوية هذا الجزء من السؤال.

إذن سؤالي صقل إلى العنوان الأصلي - هل كل تسلسل موناد قابل للتجاوز؟

هل كانت مفيدة؟

المحلول

sequence يمكن تعريفها بشكل مباشر على أنها اجتياز مع وظيفة الهوية - في هاسكل:

sequence = traverse id

أو في Scalaz 6 (من رابطك الثاني أعلاه) ، فإن أكثر مطوّلة:

def sequence[N[_], B](implicit
  a: A <:< N[B],
  t: Traverse[M],
  n: Applicative[N]
): N[M[B]] = traverse((z: A) => (z: N[B]))

لذا نعم ، يمكن تسلسل أي نوع به مثيل قابل للتجاوز (ولا يحتاج حتى إلى أن يكون مونادًا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top