۲۴ - ۴دوپلیکِتیو (!)

احتمالاً حدس میزدین که مقصدِ بعدی‌مون در سرزمینِ ‏‎Compose‎‏ اینجا باشه. اینطور که پیداست، اپلیکتیوها هم تحتِ ترکیب بسته‌اند. میشه دوتا تایپی که نمونه ِ ‏‎Applicative‎‏ دارن رو با هم ترکیب کنیم و یه نمونه ِ ‏‎Applicative‎‏ ِ جدید بگیریم. فقط اینبار خودتون باید بنویسین.

وقت تمرین‌ه

-- تایپ نمونه‌ها رو
-- .برای راهنمایی نوشتیم

{-# LANGUAGE InstanceSigs #-}


instance (Applicative f, Applicative g) 
      => Applicative (Compose f g) where
  pure :: a -> Compose f g a
  pure = undefined

  (<*>) :: Compose (a -> b)
        -> Compose a
        -> Compose b
  (Compose f) <*> (Compose a) = undefined

در یکی از فصل‌های قبلی اشاره کردیم که ‏‎Applicative‎‏ جبر ِ ضعیف‌تری نسبت به ‏‎Monad‎‏ ِه، و گفتیم که گاهی اوقات که تمامِ قدرتِ ‏‎Monad‎‏ نیاز نیست، ممکنه استفاده از ‏‎Applicative‎‏ فوایدی داشته باشه. این یکی از اون فوایده. برای ترکیب ِ ‏‎Applicative‎‏‌ها لازم نیست همه‌ی زحمت‌های لازم برای رسیدن به ترکیب ِ دوتا ‏‎Monad‎‏ رو بکشین تا یه ‏‎Monad‎‏ داشته باشین – آخ راست میگین... هنوز به ترکیب ِ موندها نرسیدیم، الان میگیم.