タイプAからタイプBまでのトータルマップを持っています。
import qualified Data.Map as M
import Data.Maybe
tmGet k m = fromJust $ M.lookup k m
tmSet k v = M.insert k v
Data.Map
実装例として使用しましたが、何でもかまいません。たとえば、インデックス付きのタプルArray
でもかまいません。Bool
tmGet True = fst
tmGet False = snd
tmAt
レンズを構築する関数が必要です。
(42, 665) ^. tmAt True == 42
(42, 665) & tmAt False +~ 1 == (42, 666)
問題は、 and (or )からどのように構築tmAt
するかです。tmGet
tmSet
tmModify