Lens: Lenses, Folds, and Traversals This package provides families of lenses, isomorphisms, folds, traversals, getters and setters. If you are looking for where to get started, a crash course video on how lens was constructed and how to use the basics is available on youtube. It is best watched in high definition to see the slides, but the slides are also available if you want to use them to follow along. The FAQ, which provides links to a large number of different resources for learning about lenses and an overview of the derivation of these types can be found on the Lens Wiki along with a brief overview and some examples. Documentation is available through github (for HEAD) or hackage for the current and preceding releases. Field Guide Examples (See wiki/Examples) First, import Control.Lens. ghci> import Control.Lens Now, you can read from lenses ghci> ("hello","world")^._2 "world" and you can write to lenses. ghci> set _2 42 ("hello","world") ("hello",42) Composing lenses for reading (or writing) goes in the order an imperative programmer would expect, and just uses (.) from the Prelude. ghci> ("hello",("world","!!!"))^._2._1 "world" ghci> set (_2._1) 42 ("hello",("world","!!!")) ("hello",(42,"!!!")) You can make a Getter out of a pure function with to. ghci> "hello"^.to length 5 You can easily compose a Getter with a Lens just using (.). No explicit coercion is necessary. ghci> ("hello",("world","!!!"))^._2._2.to length 3 As we saw above, you can write to lenses and these writes can change the type of the container. (.~) is an infix alias for set. ghci> _1 .~ "hello" $ ((),"world") ("hello","world") Conversely view, can be used as a prefix alias for (^.). ghci> view _2 (10,20) 20 There are a large number of other lens variants provided by the library, in particular a Traversal generalizes traverse from Data.Traversable. We'll come back to those later, but continuing with just lenses: You can let the library automatically derive lenses for fields of your data typ...
First seen: 2025-07-04 13:12
Last seen: 2025-07-04 17:13