ابتدای محتوای صفحه
۲۲ - ۶خودتون State بنویسین
با همون تعریفی که اول فصل آوردیم شروع کنین، فقط اگه از کتابخونه ِ transformers
یا mtl
تایپِ State
رو وارد کردین از یه اسمِ دیگه استفاده کنین تا تداخلی پیش نیاد. ما اینجا اسمش رو گذاشتیم Moi
چون کنایه به نقلقولهای معروف رو دوست داریم*؛ ولی اگه دوست داشتین تغییرش بدین.
newtype Moi s a =
Moi { runMoi :: s -> (a, s) }
*
به نقلقول (احتمال زیاد جعلی) منسوب به شاه لوئیِ چهاردهم فرانسوی اشاره داریم: “L’Etat, c’est moi”. که به انگلیسی میشه “I am the State” (م. لغت State علاوه بر حالت، معنای ایالت یا دولت هم میده، پس ترجمهی اون نقلقول میشه "من دولت هستم").
State Functor
نمونه ِ Functor
برای State
رو تعریف کنین.
instance Functor (Moi s) where
fmap :: (a -> b) -> Moi s a -> Moi s b
fmap f (Moi g) = ???
Prelude> runMoi ((+1) <$> (Moi $ \s -> (0, s))) 0
(1,0)
State Applicative
نمونه ِ Applicative
برای State
رو تعریف کنین.
instance Applicative (Moi s) where
pure :: a -> Moi s a
pure a = ???
(<*>) :: Moi s (a -> b)
-> Moi s a
-> Moi s b
(Moi f) <*> (Moi g) =
???
State Monad
نمونه ِ Monad
برای State
رو تعریف کنین.
instance Monad (Moi s) where
return = pure
(>>=) :: Moi s a
-> (a -> Moi s b)
-> Moi s b
(Moi f) >>= g =
???