content: {-|
  Module      : Monomer.Core.Lens
  Copyright   : (c) 2018 Francisco Vallarino
  License     : BSD-3-Clause (see the LICENSE file)
  Maintainer  : fjvallarino@gmail.com
  Stability   : experimental
  Portability : non-portable
  
  Lenses for the Core types.
  -}
  {-# LANGUAGE FlexibleInstances #-}
  {-# LANGUAGE FunctionalDependencies #-}
  {-# LANGUAGE TemplateHaskell #-}
  
  module Monomer.Core.Lens where
  
  import Control.Lens.TH (abbreviatedFields, makeLensesWith, makePrisms)
  
  import Monomer.Core.StyleTypes
  import Monomer.Core.ThemeTypes
  import Monomer.Core.WidgetTypes
  
  -- Style
  makeLensesWith abbreviatedFields ''SizeReq
  makeLensesWith abbreviatedFields ''Padding
  makeLensesWith abbreviatedFields ''BorderSide
  makeLensesWith abbreviatedFields ''Border
  makeLensesWith abbreviatedFields ''Radius
  makeLensesWith abbreviatedFields ''RadiusCorner
  makeLensesWith abbreviatedFields ''TextStyle
  makeLensesWith abbreviatedFields ''StyleState
  makeLensesWith abbreviatedFields ''Style
  makeLensesWith abbreviatedFields ''ThemeState
  makeLensesWith abbreviatedFields ''Theme
  
  -- Widget
  makePrisms ''WidgetKey
  makePrisms ''WidgetData
  makePrisms ''WidgetType
  makeLensesWith abbreviatedFields ''WidgetEnv
  makeLensesWith abbreviatedFields ''WidgetRequest
  makeLensesWith abbreviatedFields ''WidgetResult
  makeLensesWith abbreviatedFields ''WidgetData
  makeLensesWith abbreviatedFields ''WidgetId
  makeLensesWith abbreviatedFields ''WidgetNode
  makeLensesWith abbreviatedFields ''WidgetNodeInfo
  makeLensesWith abbreviatedFields ''WidgetInstanceNode
  