module DomainOptics
where

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


{-|
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