ابتدای محتوای صفحه
۲۴ - ۴دوپلیکِتیو (!)
احتمالاً حدس میزدین که مقصدِ بعدیمون در سرزمینِ 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 داشته باشین – آخ راست میگین... هنوز به ترکیب ِ موندها نرسیدیم، الان میگیم.