{-# LANGUAGE RankNTypes #-} {-# LANGUAGE FlexibleContexts #-} module Data.Grid.Lens where import Data.Grid import Control.Lens as L import Data.Functor.Rep as R cell :: (Dimensions dims, Eq (Coord dims)) => Coord dims -> Lens' (Grid dims a) a cell c = lens (`R.index` c) (\s b -> s & itraversed . L.index c .~ b)