lens-5.0.1: Lenses, Folds and Traversals
Copyright (C) 2012-16 Edward Kmett
License BSD-style (see the file LICENSE)
Maintainer Edward Kmett <ekmett@gmail.com>
Stability experimental
Portability non-portable
Safe Haskell Trustworthy
Language Haskell2010

Control.Lens.At

Description

Synopsis

At

class Ixed m => At m where Source #

At provides a Lens that can be used to read, write or delete the value associated with a key in a Map -like container on an ad hoc basis.

An instance of At should satisfy:

ix k ≡ at k . traverse

Methods

at :: Index m -> Lens' m ( Maybe ( IxValue m)) Source #

>>> Map.fromList [(1,"world")] ^.at 1
Just "world"
>>> at 1 ?~ "hello" $ Map.empty
fromList [(1,"hello")]

Note: Map -like containers form a reasonable instance, but not Array -like ones, where you cannot satisfy the Lens laws.

sans :: At m => Index m -> m -> m Source #

Delete the value associated with a key in a Map -like container

sans k = at k .~ Nothing

iat :: At m => Index m -> IndexedLens' ( Index m) m ( Maybe ( IxValue m)) Source #

An indexed version of at .

>>> Map.fromList [(1,"world")] ^@. iat 1
(1,Just "world")
>>> iat 1 %@~ (\i x -> if odd i then Just "hello" else Nothing) $ Map.empty
fromList [(1,"hello")]
>>> iat 2 %@~ (\i x -> if odd i then Just "hello" else Nothing) $ Map.empty
fromList []

Ixed

type family Index (s :: *) :: * Source #

Instances

Instances details
type Index ByteString Source #
Instance details

Defined in Control.Lens.At

type Index ByteString Source #
Instance details

Defined in Control.Lens.At

type Index IntSet Source #
Instance details

Defined in Control.Lens.At

type Index Text Source #
Instance details

Defined in Control.Lens.At

type Index Text Source #
Instance details

Defined in Control.Lens.At

type Index [a] Source #
Instance details

Defined in Control.Lens.At

type Index [a] = Int
type Index ( Maybe a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Maybe a) = ()
type Index ( Complex a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Identity a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Identity a) = ()
type Index ( NonEmpty a) Source #
Instance details

Defined in Control.Lens.At

type Index ( IntMap a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Tree a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Tree a) = [ Int ]
type Index ( Seq a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Set a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Set a) = a
type Index ( HashSet a) Source #
Instance details

Defined in Control.Lens.At

type Index ( HashSet a) = a
type Index ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type Index (e -> a) Source #
Instance details

Defined in Control.Lens.At

type Index (e -> a) = e
type Index (a, b) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b) = Int
type Index ( UArray i e) Source #
Instance details

Defined in Control.Lens.At

type Index ( UArray i e) = i
type Index ( Array i e) Source #
Instance details

Defined in Control.Lens.At

type Index ( Array i e) = i
type Index ( Map k a) Source #
Instance details

Defined in Control.Lens.At

type Index ( Map k a) = k
type Index ( HashMap k a) Source #
Instance details

Defined in Control.Lens.At

type Index ( HashMap k a) = k
type Index (a, b, c) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c) = Int
type Index (a, b, c, d) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d) = Int
type Index (a, b, c, d, e) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d, e) = Int
type Index (a, b, c, d, e, f) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d, e, f) = Int
type Index (a, b, c, d, e, f, g) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d, e, f, g) = Int
type Index (a, b, c, d, e, f, g, h) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d, e, f, g, h) = Int
type Index (a, b, c, d, e, f, g, h, i) Source #
Instance details

Defined in Control.Lens.At

type Index (a, b, c, d, e, f, g, h, i) = Int

type family IxValue (m :: *) :: * Source #

This provides a common notion of a value at an index that is shared by both Ixed and At .

Instances

Instances details
type IxValue ByteString Source #
Instance details

Defined in Control.Lens.At

type IxValue ByteString Source #
Instance details

Defined in Control.Lens.At

type IxValue IntSet Source #
Instance details

Defined in Control.Lens.At

type IxValue Text Source #
Instance details

Defined in Control.Lens.At

type IxValue Text Source #
Instance details

Defined in Control.Lens.At

type IxValue [a] Source #
Instance details

Defined in Control.Lens.At

type IxValue [a] = a
type IxValue ( Maybe a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Maybe a) = a
type IxValue ( Identity a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Identity a) = a
type IxValue ( NonEmpty a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( NonEmpty a) = a
type IxValue ( IntMap a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( IntMap a) = a
type IxValue ( Tree a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Tree a) = a
type IxValue ( Seq a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Seq a) = a
type IxValue ( Set k) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Set k) = ()
type IxValue ( HashSet k) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( HashSet k) = ()
type IxValue ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Vector a) = a
type IxValue ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Vector a) = a
type IxValue ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Vector a) = a
type IxValue ( Vector a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Vector a) = a
type IxValue (e -> a) Source #
Instance details

Defined in Control.Lens.At

type IxValue (e -> a) = a
type IxValue (a, a2) Source #
ix :: Int -> Traversal' (a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2) = a
type IxValue ( UArray i e) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( UArray i e) = e
type IxValue ( Array i e) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Array i e) = e
type IxValue ( Map k a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( Map k a) = a
type IxValue ( HashMap k a) Source #
Instance details

Defined in Control.Lens.At

type IxValue ( HashMap k a) = a
type IxValue (a, a2, a3) Source #
ix :: Int -> Traversal' (a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3) = a
type IxValue (a, a2, a3, a4) Source #
ix :: Int -> Traversal' (a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4) = a
type IxValue (a, a2, a3, a4, a5) Source #
ix :: Int -> Traversal' (a,a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4, a5) = a
type IxValue (a, a2, a3, a4, a5, a6) Source #
ix :: Int -> Traversal' (a,a,a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4, a5, a6) = a
type IxValue (a, a2, a3, a4, a5, a6, a7) Source #
ix :: Int -> Traversal' (a,a,a,a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4, a5, a6, a7) = a
type IxValue (a, a2, a3, a4, a5, a6, a7, a8) Source #
ix :: Int -> Traversal' (a,a,a,a,a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4, a5, a6, a7, a8) = a
type IxValue (a, a2, a3, a4, a5, a6, a7, a8, a9) Source #
ix :: Int -> Traversal' (a,a,a,a,a,a,a,a,a) a
Instance details

Defined in Control.Lens.At

type IxValue (a, a2, a3, a4, a5, a6, a7, a8, a9) = a

class Ixed m where Source #

Provides a simple Traversal lets you traverse the value at a given key in a Map or element at an ordinal position in a list or Seq .

Minimal complete definition

Nothing

Methods

ix :: Index m -> Traversal' m ( IxValue m) Source #

NB: Setting the value of this Traversal will only set the value in at if it is already present.

If you want to be able to insert missing values, you want at .

>>> Seq.fromList [a,b,c,d] & ix 2 %~ f
fromList [a,b,f c,d]
>>> Seq.fromList [a,b,c,d] & ix 2 .~ e
fromList [a,b,e,d]
>>> Seq.fromList [a,b,c,d] ^? ix 2
Just c
>>> Seq.fromList [] ^? ix 2
Nothing

Instances

Instances details
Ixed ByteString Source #
Instance details

Defined in Control.Lens.At

Ixed ByteString Source #
Instance details

Defined in Control.Lens.At

Ixed IntSet Source #
Instance details

Defined in Control.Lens.At

Ixed Text Source #
Instance details

Defined in Control.Lens.At

Ixed Text Source #
Instance details

Defined in Control.Lens.At

Ixed [a] Source #
Instance details

Defined in Control.Lens.At

Ixed ( Maybe a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( Identity a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( NonEmpty a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( IntMap a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( Tree a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( Seq a) Source #
Instance details

Defined in Control.Lens.At

Ord k => Ixed ( Set k) Source #
Instance details

Defined in Control.Lens.At

( Eq k, Hashable k) => Ixed ( HashSet k) Source #
Instance details

Defined in Control.Lens.At

Unbox a => Ixed ( Vector a) Source #
Instance details

Defined in Control.Lens.At

Storable a => Ixed ( Vector a) Source #
Instance details

Defined in Control.Lens.At

Prim a => Ixed ( Vector a) Source #
Instance details

Defined in Control.Lens.At

Ixed ( Vector a) Source #
Instance details

Defined in Control.Lens.At

Eq e => Ixed (e -> a) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (e -> a) -> Traversal' (e -> a) ( IxValue (e -> a)) Source #

a ~ a2 => Ixed (a, a2) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2) -> Traversal' (a, a2) ( IxValue (a, a2)) Source #

( IArray UArray e, Ix i) => Ixed ( UArray i e) Source #
arr ! i ≡ arr ^. ix i
arr // [(i,e)] ≡ ix i .~ e $ arr
Instance details

Defined in Control.Lens.At

Ix i => Ixed ( Array i e) Source #
arr ! i ≡ arr ^. ix i
arr // [(i,e)] ≡ ix i .~ e $ arr
Instance details

Defined in Control.Lens.At

Ord k => Ixed ( Map k a) Source #
Instance details

Defined in Control.Lens.At

( Eq k, Hashable k) => Ixed ( HashMap k a) Source #
Instance details

Defined in Control.Lens.At

(a ~ a2, a ~ a3) => Ixed (a, a2, a3) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3) -> Traversal' (a, a2, a3) ( IxValue (a, a2, a3)) Source #

(a ~ a2, a ~ a3, a ~ a4) => Ixed (a, a2, a3, a4) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4) -> Traversal' (a, a2, a3, a4) ( IxValue (a, a2, a3, a4)) Source #

(a ~ a2, a ~ a3, a ~ a4, a ~ a5) => Ixed (a, a2, a3, a4, a5) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4, a5) -> Traversal' (a, a2, a3, a4, a5) ( IxValue (a, a2, a3, a4, a5)) Source #

(a ~ a2, a ~ a3, a ~ a4, a ~ a5, a ~ a6) => Ixed (a, a2, a3, a4, a5, a6) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4, a5, a6) -> Traversal' (a, a2, a3, a4, a5, a6) ( IxValue (a, a2, a3, a4, a5, a6)) Source #

(a ~ a2, a ~ a3, a ~ a4, a ~ a5, a ~ a6, a ~ a7) => Ixed (a, a2, a3, a4, a5, a6, a7) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4, a5, a6, a7) -> Traversal' (a, a2, a3, a4, a5, a6, a7) ( IxValue (a, a2, a3, a4, a5, a6, a7)) Source #

(a ~ a2, a ~ a3, a ~ a4, a ~ a5, a ~ a6, a ~ a7, a ~ a8) => Ixed (a, a2, a3, a4, a5, a6, a7, a8) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4, a5, a6, a7, a8) -> Traversal' (a, a2, a3, a4, a5, a6, a7, a8) ( IxValue (a, a2, a3, a4, a5, a6, a7, a8)) Source #

(a ~ a2, a ~ a3, a ~ a4, a ~ a5, a ~ a6, a ~ a7, a ~ a8, a ~ a9) => Ixed (a, a2, a3, a4, a5, a6, a7, a8, a9) Source #
Instance details

Defined in Control.Lens.At

Methods

ix :: Index (a, a2, a3, a4, a5, a6, a7, a8, a9) -> Traversal' (a, a2, a3, a4, a5, a6, a7, a8, a9) ( IxValue (a, a2, a3, a4, a5, a6, a7, a8, a9)) Source #

ixAt :: At m => Index m -> Traversal' m ( IxValue m) Source #

A definition of ix for types with an At instance. This is the default if you don't specify a definition for ix .

iix :: Ixed m => Index m -> IndexedTraversal' ( Index m) m ( IxValue m) Source #

An indexed version of ix .

>>> Seq.fromList [a,b,c,d] & iix 2 %@~ f'
fromList [a,b,f' 2 c,d]
>>> Seq.fromList [a,b,c,d] & iix 2 .@~ h
fromList [a,b,h 2,d]
>>> Seq.fromList [a,b,c,d] ^@? iix 2
Just (2,c)
>>> Seq.fromList [] ^@? iix 2
Nothing

Contains

class Contains m where Source #

This class provides a simple Lens that lets you view (and modify) information about whether or not a container contains a given Index .

Methods

contains :: Index m -> Lens' m Bool Source #

>>> IntSet.fromList [1,2,3,4] ^. contains 3
True
>>> IntSet.fromList [1,2,3,4] ^. contains 5
False
>>> IntSet.fromList [1,2,3,4] & contains 3 .~ False
fromList [1,2,4]

icontains :: Contains m => Index m -> IndexedLens' ( Index m) m Bool Source #

An indexed version of contains .

>>> IntSet.fromList [1,2,3,4] ^@. icontains 3
(3,True)
>>> IntSet.fromList [1,2,3,4] ^@. icontains 5
(5,False)
>>> IntSet.fromList [1,2,3,4] & icontains 3 %@~ \i x -> if odd i then not x else x
fromList [1,2,4]
>>> IntSet.fromList [1,2,3,4] & icontains 3 %@~ \i x -> if even i then not x else x
fromList [1,2,3,4]