۱۵ - ۵مثال‌های استفاده از مانوید

خوبیِ مانویدها اینه که غریبه نیستن؛ همه‌جا وجود دارن. بهترین راهِ معرفی‌شون هم دیدنِ چندتا مثال از عملیات‌های مانویدی ِ رایج ِه. فقط به خاطر داشته باشین که این تایپکلاس الگو رو انتزاع می‌کنه تا بشه از عملیات‌هاش برای یه بازه‌ی بزرگی از تایپ‌ها استفاده کرد.

لیست

یکی از تایپ‌های رایج با یه نمونه از ‏‎Monoid‎‏، لیست‌ه. ببینید چطور عملیات‌های مانویدی با لیست کار می‌کنن:

Prelude> mappend [1, 2, 3] [4, 5, 6]
[1,2,3,4,5,6]
Prelude> mconcat [[1..3], [4..6]]
[1,2,3,4,5,6]
Prelude> mappend "Trout" " goes well with garlic"
"Trout goes well with garlic"

باید براتون آشنا باشه:

Prelude> (++) [1, 2, 3] [4, 5, 6]
[1,2,3,4,5,6]
Prelude> (++) "Trout" " goes well with garlic"
"Trout goes well with garlic"
Prelude> foldr (++) [] [[1..3], [4..6]]
[1,2,3,4,5,6]
Prelude> foldr mappend mempty [[1..3], [4..6]]
[1,2,3,4,5,6]

رفیق قدیمی‌مون ‏‎(++)‎‏! اگه به تعریفِ ‏‎‎‏Monoid برای لیست‌ها هم نگاه کنیم، می‌بینیم چطور با هم همخونی دارن:

instance Monoid [a] where
  mempty  = []
  mappend = (++)

نمونه‌های بقیه‌ی تایپ‌ها فرق دارن، اما ایده‌ی کلی‌شون تغییری نمی‌کنه.