module Utils.SemanticEditors where
import Data.Array
import qualified Data.Map as Map
import Control.Arrow
-- Semantic editors, maybe to move somewhere else

 -- Array element
element i = \e arr -> arr // [(i,e (arr ! i))]
 
-- Finite Map 
value k = \e map -> Map.adjust e k map

-- Lists of pairs -- Not a combinator
inzipmap sel fs = uncurry zip . sel (fmap fs)  . unzip
inzip sel fs = uncurry zip . sel (fs)  . unzip