۱۷ - ۹تمرین‌های فصل

از روی تایپِ داده شده که نمونه ِ ‏‎Applicative‎‏ داره، تایپِ متود‌هاش رو اختصاصی کنین. اختصاصی‌سازی‌تون رو در REPL تست کنین.

۱.

-- تایپ
[]

-- متودها
pure  :: a -> ? a
(<*>) :: ? (a -> b) -> ? a -> ? b

۲.

-- تایپ
IO

-- متودها
pure  :: a -> ? a
(<*>) :: ? (a -> b) -> ? a -> ? b

۳.

-- تایپ
(,) a

-- متودها
pure  :: a -> ? a
(<*>) :: ? (a -> b) -> ? a -> ? b

۴.

-- تایپ
(->) e

-- متودها
pure  :: a -> ? a
(<*>) :: ? (a -> b) -> ? a -> ? b

برای نوع‌داده‌های زیر نمونه بنویسین. گیج شدین؟ اول بنویسین چه تایپی باید داشته باشه. از کتابخونه ِ checkers برای تستِ نمونه‌هاتون استفاده کنین.

۱.

data Pair a = Pair a a deriving Show

۲.

-- احتمالاً آشنا باشه
data Two a b = Two a b

۳.

data Three a b c = Three a b c

۴.

data Three' a b = Three' a b b

۵.

data Four a b c d = Four a b c d

۶.

data Four' a b = Four' a a a b

ترکیب‌ها

تمرین حروف صدادار و بی‌صدا در فصلِ فولدها یادتون هست؟ با استفاده از ‏‎liftA3‎‏ از ‏‎Control.Applicative‎‏، یه تابع بنویسین که ترکیب‌های ممکن از سه لیستِ ورودی رو ایجاد کنه.

import Control.Applicative (liftA3)

stops :: String
stops = "pbtdkg"

vowels :: String
vowels = "aeiou"

combos :: [a] -> [b] -> [c] -> [(a, b, c)]
combos = undefined