generic-lens-2.2.1.0: Generically derive traversals, lenses and prisms.
Copyright (C) 2020 Csongor Kiss
License BSD3
Maintainer Csongor Kiss <kiss.csongor.kiss@gmail.com>
Stability experimental
Portability non-portable
Safe Haskell None
Language Haskell2010

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
>>> import Control.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 a s | s sel -> a where Source #

Sums that have generic prisms.

Methods

_As :: Prism s s a 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

Instances details
AsConstructor ctor s s a a => AsAny (ctor :: Symbol ) a s Source #
Instance details

Defined in Data.Generics.Sum.Any

Methods

_As :: Prism s s a a Source #

AsType a s => AsAny (a :: Type ) a s Source #
Instance details

Defined in Data.Generics.Sum.Any

Methods

_As :: Prism s s a a Source #