ابتدای محتوای صفحه
۲۴ - ۶تمرینها: نمونههای Compose
۱.
نمونه ِ Compose Foldable
رو بنویسین.
اون foldMap = undefined
رو برای راهنمایی گذاشتیم تا بیشتر شبیه چیزهایی که قبلاً دیدین بشه.
instance (Foldable f, Foldable g) =>
Foldable (Compose f g) where
foldMap = undefined
۲.
نمونه ِ Compose Traversable
رو بنویسین.
instance (Traversable f, Traversable g) =>
Traversable (Compose f g) where
traverse = undefined
حالا نوبت یه چیز کاملاً بیربطه
این هیچ ربطی به هیچ چیز تو این فصل نداره، اما تمرینِ جذابیه.
class Bifunctor p where
{-# MINIMAL bimap | first, second #-}
bimap :: (a -> b)
-> (c -> d)
-> p a c
-> p b d
bimap f g = first f . second g
first :: (a -> b) -> p a c -> p b c
first f = bimap f id
second :: (b -> c) -> p a b -> p a c
second = bimap id
فانکتور ایه که میتونه بجای یک آرگومانِ تایپی روی دوتا آرگومان نگاشت کنه. برای تایپهای زیر نمونه ِ Bifunctor
بنویسین:
۱.
-- .هرچی کمتر فکر کنین آسونتر میشه
data Deux a b = Deux a b
۲.
data Const a b = Const a
۳.
data Drei a b c = Drei a b c
۴.
data SuperDrei a b c = SuperDrei a b
۵.
data SemiDrei a b c = SemiDrei a
۶.
data Quadriceps a b c d =
Quadzzz a b c d
۷.
data Either a b =
Left a
| Right b