module DomainOptics where

import qualified DomainCore.Deriver as Deriver
import qualified DomainOptics.InstanceDecs as InstanceDecs
import DomainOptics.Prelude

-- |
-- Generates 'LabelOptic' instances for enums, products and sums,
-- automatically choosing the appropriate optic type.
--
-- Requires to have the @UndecidableInstances@ extension enabled.
labelOpticDeriver :: Deriver
labelOpticDeriver =
  (TypeDec -> [Dec]) -> Deriver
Deriver.effectless TypeDec -> [Dec]
InstanceDecs.labelOptic