module Graphics.UI.FreeGame.Internal.Raindrop (view, over) where import Data.Functor.Identity import Control.Monad.Reader import Control.Applicative view :: MonadReader s m => ((a -> Const a b) -> (s -> Const a t)) -> m a view f = ask >>= return . getConst . f Const over :: ((a -> Identity b) -> (s -> Identity t)) -> (a -> b) -> s -> t over l f = runIdentity . l (Identity . f)