在this关于镜片的好文章中,Gabriel Gonzalez写了这段代码:
import Control.Monad.Trans.Class
import Control.Monad.Trans.State
strike :: StateT Game IO ()
strike = do
lift $ putStrLn "*shink*"
boss.health -= 10
但后来写了
newState^.boss.health
我知道为了修改State
monad(这里是StateT
monad变换器)你需要使用get
函数获取状态,用它做一些事情,并且然后使用put
函数。但是这里作者没有使用这些功能。同样在第二个示例中,他使用^
运算符,这意味着要使用boss
镜头,您需要Game
值。但他在第一个例子中没有这样做。怎么样?
答案 0 :(得分:8)