union-map-0.1: src/Internal.hs
{-# LANGUAGE TypeOperators #-}
module Internal where
import Control.Applicative
import Data.Extensible.Internal (Member)
import Data.Extensible.Plain (K0 (..))
import Data.Extensible.Sum
import Data.Monoid
retract :: Member as a => K0 :| as -> Maybe a
retract = fmap getK0 . getFirst . getConst . picked (Const . First . Just)
{-# INLINE retract #-}
modify :: Member as a => (a -> a) -> K0 :| as -> K0 :| as
modify f = getK0 . picked (K0 . fmap f)
{-# INLINE modify #-}