lens-4.17: Lenses, Folds and Traversals

Copyright(C) 2012-16 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityprovisional
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Numeric.Lens

Contents

Description

 
Synopsis

Documentation

base :: (HasCallStack, Integral a) => Int -> Prism' String a #

A prism that shows and reads integers in base-2 through base-36

Note: This is an improper prism, since leading 0s are stripped when reading.

>>> "100" ^? base 16
Just 256
>>> 1767707668033969 ^. re (base 36)
"helloworld"

integral :: (Integral a, Integral b) => Prism Integer Integer a b #

This ReifiedPrism can be used to model the fact that every Integral type is a subset of Integer.

Embedding through the ReifiedPrism only succeeds if the Integer would pass through unmodified when re-extracted.

Predefined bases

Arithmetic lenses

adding :: Num a => a -> Iso' a a #

adding n = iso (+n) (subtract n)
>>> [1..3]^..traverse.adding 1000
[1001,1002,1003]

subtracting :: Num a => a -> Iso' a a #

subtracting n = iso (subtract n) ((+n)
subtracting n = from (adding n)

multiplying :: (Fractional a, Eq a) => a -> Iso' a a #

multiplying n = iso (*n) (/n)

Note: This errors for n = 0

>>> 5 & multiplying 1000 +~ 3
5.003
>>> let fahrenheit = multiplying (9/5).adding 32 in 230^.from fahrenheit
110.0

dividing :: (Fractional a, Eq a) => a -> Iso' a a #

 dividing n = iso (/n) (*n)
 dividing n = from (multiplying n)

Note: This errors for n = 0

exponentiating :: (Floating a, Eq a) => a -> Iso' a a #

exponentiating n = iso (**n) (**recip n)

Note: This errors for n = 0

>>> au (_Wrapping Sum . from (exponentiating 2)) (foldMapOf each) (3,4) == 5
True

negated :: Num a => Iso' a a #

negated = iso negate negate
>>> au (_Wrapping Sum . negated) (foldMapOf each) (3,4) == 7
True
>>> au (_Wrapping Sum) (foldMapOf (each.negated)) (3,4) == -7
True

pattern Integral :: forall a. Integral a => a -> Integer #