ابتدای محتوای صفحه
۱۷ - ۹تمرینهای فصل
از روی تایپِ داده شده که نمونه ِ 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