ابتدای محتوای صفحه
۱۸ - ۷تمرینهای فصل
برای تایپهای زیر نمونه ِ Monad بنویسین. با مشخصههای QuickCheck که نشون دادیم نمونههاتون رو تست کنین.
۱.
به Nope Monad خوش اومدین، جایی که هیچ اتفاقی نمیوفته و هیچکس هم اهمیت نمیده.
data Nope a =
NopeDotJpg
-- .جدی میگیم. بنویسینش۲.
data PhhhbbtttEither b a =
Left a
| Right b۳.
یه نمونه ِ Monad برای Identity بنویسین.
newtype Identity a = Identity a
deriving (Eq, Ord, Show)
instance Functor Identity where
fmap = undefined
instance Applicative Identity where
pure = undefined
(<*>) = undefined
instance Monad Identity where
return = pure
(>>=) = undefined۴.
این احتمالاً از نمونه ِ Applicativeِش سادهتر باشه. از Functor ای استفاده کنین که Monad لازمش داره، و از اونجا ادامه بدین.
data List a =
Nil
| Cons a (List a)توابعِ زیر رو با استفاده از متودهای Monad و Functor بنویسین. استفاده از چیزهایی مثلِ همانی و ترکیب هم ایرادی نداره، اما حتماً با تایپهای داده شده تایپچک بشه:
۱.
j :: Monad m => m (m a) -> m a-- رفتار مورد نظر
Prelude> j [[1, 2], [], [3]]
[1,2,3]
Prelude> j (Just (Just 1))
Just 1
Prelude> j (Just Nothing)
Nothing
Prelude> j Nothing
Nothing۲.
l1 :: Monad m => (a -> b) -> m a -> m b۳.
l2 :: Monad m
=> (a -> b -> c) -> m a -> m b -> m c۴.
a :: Monad m => m a -> m (a -> b) -> m b۵.
-- لازم دارین recursion برای این یکی
meh :: Monad m
=> [a] -> (a -> m b) -> m [b]۶.
-- استفاده کنین meh راهنمایی: از
flipType :: (Monad m) => [m a] -> m [a]