使用镜头测试地图隶属关系

问题描述 投票:2回答:1

使用镜头检查状态地图是否有钥匙的惯用方式是什么?这是我目前的尝试:

module Foo where

import Control.Lens
import Data.Map
import Control.Monad.State
import Data.Maybe (isJust)

check :: Int -> StateT (Map Int Int) IO ()
check k = do
  present <- use $ at k.to isJust
  unless present $ lift $ putStrLn "Not present!"

这可行,但是to isJust部分感觉有些笨拙...

haskell lens
1个回答
1
投票

对于这种特殊情况,请保持简单,不要使用lens

present <- gets (member k)

如果仍然要使用lens,例如您需要遍历某些字段进入状态以获得地图,请使用uses

present <- uses (field1.field2) (member k)

要根据uses编写第一个动作,请使用身份光学元件id

present <- uses id (member k)

但是我不建议您免费这样做。

© www.soinside.com 2019 - 2024. All rights reserved.