generic-lens-1.0.0.2: Generically derive traversals, lenses and prisms.

Copyright(C) 2017 Csongor Kiss
LicenseBSD3
MaintainerCsongor Kiss <kiss.csongor.kiss@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.Generics.Sum.Constructors

Contents

Description

Derive constructor-name-based prisms generically.

Synopsis

Prisms

Running example:

>>> :set -XTypeApplications
>>> :set -XDataKinds
>>> :set -XDeriveGeneric
>>> :set -XFlexibleContexts
>>> :set -XTypeFamilies
>>> import GHC.Generics
>>> :m +Data.Generics.Internal.VL.Prism
>>> :m +Data.Generics.Product.Fields
>>> :m +Data.Function
>>> :{
data Animal a
  = Dog (Dog a)
  | Cat Name Age
  | Duck Age
  deriving (Generic, Show)
data Dog a
  = MkDog
  { name   :: Name
  , age    :: Age
  , fieldA :: a
  }
  deriving (Generic, Show)
type Name = String
type Age  = Int
dog, cat, duck :: Animal Int
dog = Dog (MkDog "Shep" 3 30)
cat = Cat "Mog" 5
duck = Duck 2
:}

class AsConstructor (ctor :: Symbol) s t a b | ctor s -> a, ctor t -> b where Source #

Sums that have a constructor with a given name.

Minimal complete definition

_Ctor

Methods

_Ctor :: Prism s t a b Source #

A prism that projects a named constructor from a sum. Compatible with the lens package's Prism type.

>>> dog ^? _Ctor @"Dog"
Just (MkDog {name = "Shep", age = 3, fieldA = 30})
>>> dog ^? _Ctor @"Cat"
Nothing
>>> cat ^? _Ctor @"Cat"
Just ("Mog",5)
>>> _Ctor @"Cat" # ("Garfield", 6) :: Animal Int
Cat "Garfield" 6

Type errors

>>> cat ^? _Ctor @"Turtle"
...
...
... The type Animal Int does not contain a constructor named "Turtle"
...
Instances
(Generic s, ErrorUnless ctor s (HasCtorP ctor (Rep s)), Generic t, s' ~ Proxied s, t' ~ Proxied t, Generic s', Generic t', GAsConstructor' ctor (Rep s) a, GAsConstructor' ctor (Rep s') a', GAsConstructor ctor (Rep s) (Rep t) a b, t ~ Infer s a' b, GAsConstructor' ctor (Rep t') b', s ~ Infer t b' a) => AsConstructor ctor s t a b Source # 
Instance details

Defined in Data.Generics.Sum.Constructors

Methods

_Ctor :: Prism s t a b Source #

class AsConstructor' (ctor :: Symbol) s a | ctor s -> a where Source #

Minimal complete definition

_Ctor'

Methods

_Ctor' :: Prism s s a a Source #

Instances
(Generic s, ErrorUnless ctor s (HasCtorP ctor (Rep s)), GAsConstructor' ctor (Rep s) a) => AsConstructor' ctor s a Source # 
Instance details

Defined in Data.Generics.Sum.Constructors

Methods

_Ctor' :: Prism s s a a Source #