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