我有一张从 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)
问题是我如何构造tmAt
和tmGet
(tmSet
或tmModify
)?