镜头:这个filteredHas组合器是否已经存在?

时间:2018-06-04 15:46:52

标签: haskell lens

此组合器是否已存在于lens或其他库中的某个位置?

filteredHas :: Lens.Fold s i -> Lens.IndexedTraversal' i s s
filteredHas fold f val =
    case val ^? fold of
    Nothing -> pure val
    Just proof -> Lens.indexed f proof val

对于只有在具有某个子值时才希望修改值的情况,它才有用。

即它可以替换像

这样的代码
Lens.filtered (Lens.has part) %~ \x -> something (x ^?! part) x

filteredHas part %@~ something

0 个答案:

没有答案