ابتدای محتوای صفحه
۲۲ - ۶خودتون 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 =
???