我的意思是,不是像这样简单的东西(从这里):
strike :: StateT Game IO ()
strike = do
lift $ putStrLn "*shink*"
boss.health -= 10
但是像使用镜头映射类型从Linear
. 我将如何用镜头来表达这一点:
vecMod :: (Integral a) => V2 a -> V2 a -> V2 a
vecMod (V2 x1 y1) (V2 x2 y2) = V2 (x1 `mod` x2) (y1 `mod` y2)
另一个例子:我当前的代码充满了这样的小表达式:
isAt :: Thing -> Position -> Game Bool
isAt thing pos = do
b <- use board
return $ elem thing (b ! pos)
(板在哪里Array (V2 Int)
)
我猜是(和lens
)有一种更规范的方式来表达这一点。
一般来说:我如何找出镜头能够做什么,不能做什么以及它是如何完成的?