与国家设计模式相当的功能编程是什么?或者更具体地说,this Wikipedia example国家设计模式将如何转化为FP?
解决方法
这个模式是使用
State monad的一个例子,一个计算
环境增加了状态的代码.
环境增加了状态的代码.
这是Haskell中的一个实现.
一些助手:
import Control.Monad.Trans.State import Control.Monad.IO.Class import Data.Char
程序的两种运行模式
data Mode = A | B
使用此模式进行状态计算的类型,增加了一个计数器.
type StateM a = StateT (Int,Mode) IO a
写函数,一个在StateM上下文中的函数,
根据状态模式改变其行为:
writeName :: String -> StateM () writeName s = do (n,mode) <- get case mode of A -> do liftIO (putStrLn (map toLower s)) put (0,B) B -> do let n' = n + 1 liftIO (putStrLn (map toUpper s)) if n' > 1 then put (n',A) else put (n',B)
运行程序,最初在状态A启动状态计算
main = flip runStateT (0,A) $do writeName "Monday" writeName "Tuesday" writeName "Wednesday" writeName "Thursday" writeName "Saturday" writeName "Sunday"
monday TUESDAY WEDNESDAY thursday SATURDAY SUNDAY