۲۴ - ۶تمرین‌ها: نمونه‌های 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