HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleoptics-core-0.4.1.1Haskell2010

Optics.At.Core

This module provides optics for Map and Set-like containers, including an AffineTraversal to traverse a key in a map or an element of a sequence:

Example1 expression
preview (ix 1) ['a','b','c']Just 'b'

a Lens to get, set or delete a key in a map:

Example1 expression
set (at 0) (Just 'b') (Map.fromList [(0, 'a')])fromList [(0,'b')]

and a Lens to insert or remove an element of a set:

Example1 expression
IntSet.fromList [1,2,3,4] & contains 3 .~ FalsefromList [1,2,4]

The Optics.At module from optics-extra provides additional instances of the classes defined here.

  • 3 classes
  • 3 values

Type families

2 declarations
familytype family Index s
#

Type family that takes a key-value container type and returns the type of keys (indices) into the container, for example Index (Map k a) ~ k. This is shared by Ixed, At and Contains.

Instances22Index, …
  • type Index IntSet = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (UArray i e) = iDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Complex a) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (IntMap a) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Map k a) = kDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Seq a) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Set a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Tree a) = [Int]Defined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Array i e) = iDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (NonEmpty a) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Identity a) = ()Defined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (Maybe a) = ()Defined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d, e) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d, e, f) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d, e, f, g) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d, e, f, g, h) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (a, b, c, d, e, f, g, h, i) = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index (e -> a) = eDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type Index [a] = IntDefined in optics-core-0.4.1.1 · Optics.At.Core
familytype family IxValue m
#

Type family that takes a key-value container type and returns the type of values stored in the container, for example IxValue (Map k a) ~ a. This is shared by both Ixed and At.

Instances21IxValue, …
  • type IxValue IntSet = ()Defined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (UArray i e) = eDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (IntMap a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Map k a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Seq a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Set k) = ()Defined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Tree a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Array i e) = eDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (NonEmpty a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Identity a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (Maybe a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue (a0, a1, a2) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a) a
  • type IxValue (a0, a1, a2, a3) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a) a
  • type IxValue (a0, a1, a2, a3, a4) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a, a) a
  • type IxValue (a0, a1, a2, a3, a4, a5) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a, a, a) a
  • type IxValue (a0, a1, a2, a3, a4, a5, a6) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a, a, a, a) a
  • type IxValue (a0, a1, a2, a3, a4, a5, a6, a7) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a, a, a, a, a) a
  • type IxValue (a0, a1, a2, a3, a4, a5, a6, a7, a8) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a, a, a, a, a, a, a, a) a
  • type IxValue (a0, a2) = a0Defined in optics-core-0.4.1.1 · Optics.At.Core
    ix :: Int -> AffineTraversal' (a, a) a
  • type IxValue (e -> a) = aDefined in optics-core-0.4.1.1 · Optics.At.Core
  • type IxValue [a] = aDefined in optics-core-0.4.1.1 · Optics.At.Core

Ixed

2 declarations
classclass Ixed m where
#

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

Associated types

  • type family IxKind m :: OpticKind

    Type family that takes a key-value container type and returns the kind of optic to index into it. For most containers, it's An_AffineTraversal, Representable (Naperian) containers it is A_Lens, and multi-maps would have A_Traversal.

Methods

  • ix :: Index m -> Optic' (IxKind m) NoIx m (IxValue m)

    NB: Setting the value of this AffineTraversal 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.

    Example1 expression
    [1,2,3,4] & ix 2 %~ (*10)[1,2,30,4]
    Example1 expression
    "abcd" & ix 2 .~ 'e'"abed"
    Example1 expression
    "abcd" ^? ix 2Just 'c'
    Example1 expression
    [] ^? ix 2Nothing
Instances21Ixed, …
  • Ixed IntSetDefined in optics-core-0.4.1.1 · Optics.At.Core
  • Ord k => Ixed (Set k)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (IntMap a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (Seq a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (Tree a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (NonEmpty a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (Identity a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed (Maybe a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ixed [a]Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ix i => Ixed (Array i e)Defined in optics-core-0.4.1.1 · Optics.At.Core
    arr ! i ≡ arr ^. ix i
    arr // [(i,e)] ≡ ix i .~ e $ arr
    
  • Eq e => Ixed (e -> a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ord k => Ixed (Map k a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (IArray UArray e, Ix i) => Ixed (UArray i e)Defined in optics-core-0.4.1.1 · Optics.At.Core
    arr ! i ≡ arr ^. ix i
    arr // [(i,e)] ≡ ix i .~ e $ arr
    
  • a0 ~ a1 => Ixed (a0, a1)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2) => Ixed (a0, a1, a2)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3) => Ixed (a0, a1, a2, a3)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3, a0 ~ a4) => Ixed (a0, a1, a2, a3, a4)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3, a0 ~ a4, a0 ~ a5) => Ixed (a0, a1, a2, a3, a4, a5)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3, a0 ~ a4, a0 ~ a5, a0 ~ a6) => Ixed (a0, a1, a2, a3, a4, a5, a6)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3, a0 ~ a4, a0 ~ a5, a0 ~ a6, a0 ~ a7) => Ixed (a0, a1, a2, a3, a4, a5, a6, a7)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • (a0 ~ a1, a0 ~ a2, a0 ~ a3, a0 ~ a4, a0 ~ a5, a0 ~ a6, a0 ~ a7, a0 ~ a8) => Ixed (a0, a1, a2, a3, a4, a5, a6, a7, a8)Defined in optics-core-0.4.1.1 · Optics.At.Core

At

3 declarations
classclass (Ixed m, IxKind m ~ An_AffineTraversal) => At m where
#

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 % _Just

Methods

  • at :: Index m -> Lens' m (Maybe (IxValue m))
    Example1 expression
    Map.fromList [(1,"world")] ^. at 1Just "world"
    Example1 expression
    at 1 ?~ "hello" $ Map.emptyfromList [(1,"hello")]

    Note: Usage of this function might introduce space leaks if you're not careful to make sure that values put inside the Just constructor are evaluated. To force the values and avoid such leaks, use at' instead.

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

Instances5At
  • At IntSetDefined in optics-core-0.4.1.1 · Optics.At.Core
  • Ord k => At (Set k)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • At (IntMap a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • At (Maybe a)Defined in optics-core-0.4.1.1 · Optics.At.Core
  • Ord k => At (Map k a)Defined in optics-core-0.4.1.1 · Optics.At.Core
valueat' :: At m => Index m -> Lens' m (Maybe (IxValue m))
#

Version of at strict in the value inside the Just constructor.

Example:

Example1 expression
(at () .~ Just (error "oops") $ Nothing) `seq` ()()
Example1 expression
(at' () .~ Just (error "oops") $ Nothing) `seq` ()*** Exception: oops...
Example1 expression
view (at ()) (Just $ error "oops") `seq` ()()
Example1 expression
view (at' ()) (Just $ error "oops") `seq` ()*** Exception: oops...

It also works as expected for other data structures:

Example1 expression
(at 1 .~ Just (error "oops") $ Map.empty) `seq` ()()
Example1 expression
(at' 1 .~ Just (error "oops") $ Map.empty) `seq` ()*** Exception: oops...
valuesans :: At m => Index m -> m -> m
#

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

sans k = at k .~ Nothing

Contains

1 declaration
classclass Contains m where
#

This class provides a simple Lens that lets you view (and modify) information about whether or not a container contains a given Index. Instances are provided for Set-like containers only.

Methods

  • contains :: Index m -> Lens' m Bool
    Example1 expression
    IntSet.fromList [1,2,3,4] ^. contains 3True
    Example1 expression
    IntSet.fromList [1,2,3,4] ^. contains 5False
    Example1 expression
    IntSet.fromList [1,2,3,4] & contains 3 .~ FalsefromList [1,2,4]
Instances2Contains