Я читаю 2-е издание (великой) книги Грэма Хаттона "Progamming in Haskell" (Cambridge Press).
Читая раздел «Государственная монада», я наткнулся на небольшое задание, которое я дал себе.
Как можно переписать следующее, используя where
вместо let
?
type State = Int
newtype ST a = S (State -> (a, State))
instance Functor ST where
-- fmap :: (a -> b) -> ST a -> ST b
fmap g st = S (\state -> let (x, s') = app st state in (g x, s'))
Я пробовал варианты этого кода, но он не работает:
instance Functor ST where
-- fmap :: (a -> b) -> ST a -> ST b
fmap g st = S (\state -> (g x, newstate))
where (x, newstate) = app st state
Я знаю, что он сам по себе бесполезен, но я хотел бы знать, возможно ли это и как это возможно.