module Yesod.Core.Lens
  ( envL
  , siteL
  ) where

import Freckle.App.Prelude

import Control.Lens (Lens', lens)
import Yesod.Core.Types (HandlerData, RunHandlerEnv, handlerEnv, rheSite)

envL :: Lens' (HandlerData child site) (RunHandlerEnv child site)
envL :: forall child site (f :: * -> *).
Functor f =>
(RunHandlerEnv child site -> f (RunHandlerEnv child site))
-> HandlerData child site -> f (HandlerData child site)
envL = (HandlerData child site -> RunHandlerEnv child site)
-> (HandlerData child site
    -> RunHandlerEnv child site -> HandlerData child site)
-> forall {f :: * -> *}.
   Functor f =>
   (RunHandlerEnv child site -> f (RunHandlerEnv child site))
   -> HandlerData child site -> f (HandlerData child site)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens HandlerData child site -> RunHandlerEnv child site
forall child site.
HandlerData child site -> RunHandlerEnv child site
handlerEnv ((HandlerData child site
  -> RunHandlerEnv child site -> HandlerData child site)
 -> forall {f :: * -> *}.
    Functor f =>
    (RunHandlerEnv child site -> f (RunHandlerEnv child site))
    -> HandlerData child site -> f (HandlerData child site))
-> (HandlerData child site
    -> RunHandlerEnv child site -> HandlerData child site)
-> forall {f :: * -> *}.
   Functor f =>
   (RunHandlerEnv child site -> f (RunHandlerEnv child site))
   -> HandlerData child site -> f (HandlerData child site)
forall a b. (a -> b) -> a -> b
$ \HandlerData child site
x RunHandlerEnv child site
y -> HandlerData child site
x {handlerEnv = y}

siteL :: Lens' (RunHandlerEnv child site) site
siteL :: forall child site (f :: * -> *).
Functor f =>
(site -> f site)
-> RunHandlerEnv child site -> f (RunHandlerEnv child site)
siteL = (RunHandlerEnv child site -> site)
-> (RunHandlerEnv child site -> site -> RunHandlerEnv child site)
-> forall {f :: * -> *}.
   Functor f =>
   (site -> f site)
   -> RunHandlerEnv child site -> f (RunHandlerEnv child site)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens RunHandlerEnv child site -> site
forall child site. RunHandlerEnv child site -> site
rheSite ((RunHandlerEnv child site -> site -> RunHandlerEnv child site)
 -> forall {f :: * -> *}.
    Functor f =>
    (site -> f site)
    -> RunHandlerEnv child site -> f (RunHandlerEnv child site))
-> (RunHandlerEnv child site -> site -> RunHandlerEnv child site)
-> forall {f :: * -> *}.
   Functor f =>
   (site -> f site)
   -> RunHandlerEnv child site -> f (RunHandlerEnv child site)
forall a b. (a -> b) -> a -> b
$ \RunHandlerEnv child site
x site
y -> RunHandlerEnv child site
x {rheSite = y}