Different optics allow programmers to succinctly access and modify different parts of a data structure. The most well-known example of an optic is a lens which is characterised by a getter and a setter. Recently, programming with optics has become increasingly popular in the Haskell community due to the `lens` library. This is in large due to the so-called van Laarhoven representation which makes composing different parts of the optics hierarchy extremely easy. In this talk, I will explain the optics hierachy, why the van Laarhoven representation has proved so successful and also about profunctor optics which are a generalisation of van Laarhoven style optics.