Maybe
タイプ(または部分性をモデル化するための他のタイプ)内にネストされた値を変更する最もクリーンな方法を見つけようとしています。
セットアップ例は次のとおりです。
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data Outer = Outer { _inner :: Maybe Inner }
deriving (Show)
data Inner = Inner { _foo :: Int }
deriving (Show)
makeLenses ''Outer
makeLenses ''Inner
これをやや厄介な方法で行うのは非常に簡単ですlens
:
wibble :: Outer -> Maybe Outer
wibble o = do i <- view inner o
let i' = over foo succ i
return $ set inner (Just i') o
これが厄介な理由を指摘するために、私が書きたいことは次のとおりです。
wibble' :: Outer -> Maybe Outer
wibble' = overish inner.foo succ
overish = ???
フィールドの検索に失敗すると、発生する可能性のある各ポイントで失敗を明示的にチェックするのではなく、操作全体が失敗するだけです。
助言がありますか?さまざまなモジュールをナビゲートしてみましたlens
が、法案に合うものは何もありません。