generic-lens-0.5.1.0: Generic data-structure operations exposed as lenses.

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

Data.Generics.Sum.Any

Contents

Description

Derive a variety of prisms generically.

Synopsis

Prisms

Running example:

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

class AsAny (sel :: k) a s | s sel k -> a where Source #

Sums that have generic prisms.

Minimal complete definition

_As

Methods

_As :: Prism' s a Source #

A prism that projects a sum as identified by some selector. Currently supported selectors are constructor names and unique types. Compatible with the lens package's Prism type.

>>> dog ^? _As @"Dog"
Just (MkDog {name = "Shep", age = 3})
>>> dog ^? _As @Dog
Just (MkDog {name = "Shep", age = 3})
>>> dog ^? _As @"Cat"
Nothing
>>> cat ^? _As @(Name, Age)
Just ("Mog",5)
>>> cat ^? _As @"Cat"
Just ("Mog",5)
>>> _As @"Cat" # ("Garfield", 6) :: Animal
Cat "Garfield" 6
>>> duck ^? _As @Age
Just 2

Instances

AsConstructor ctor s s a a => AsAny Symbol ctor a s Source # 

Methods

_As :: Prism' s s Source #

AsType a s => AsAny * a a s Source # 

Methods

_As :: Prism' s s Source #