Haskell ekosisteminde optikler, lens, prism, traversal, veri yapılarının bölümlerine odaklanmayı ve dönüştürmeyi soyutlayan araçlardır. Profunctor optik lens prism terminolojisini anlamak için önce profunctor kavramını netleştirmek gerekir. Bir profunctor, `p :: * -> * -> *` türünde bir tip kurucusudur ve `Profunctor` tipi sınıfı `dimap :: (a -> b) -> (c -> d) -> p b c -> p a d` arayüzünü gerektirir. `dimap` ilk argümanında kontravaryant, ikincisinde kovaryantdır. Basit fonksiyon tipi `(->)` bir profunctordur: `dimap f g h = g . h . f`. Bu yapı, profunctor optik lens prism çerçevesinin temel taşını oluşturur. Lens, bir veri yapısının belirli bir alanına odaklanmayı ifade eder. Profunctor temsilinde Lens şu şekilde tanımlanır: `type Lens s t a b = forall p. Strong p => p a b -> p s t`. Burada `Strong` tipi sınıfı, `first' :: p a b -> p (a, c) (b, c)` operasyonunu sağlar. Bu operasyon, profunctorün bir çiftin birinci bileşeni üzerinde çalışabilmesini ifade eder ve tam olarak "bir alanı seçip dönüştürme" semantiğini kodlar. Prism ise lens'in çift taraflısıdır: toplamsal tipler (sum types) üzerinde çalışır. Profunctor optik lens prism bağlamında Prism şöyle tanımlanır: `type Prism s t a b = forall p. Choice p => p a b -> p s t`. `Choice` tipi sınıfı `left' :: p a b -> p (Either a c) (Either b c)` operasyonunu sunar; bu da bir `Either` dalında seçici biçimde çalışmayı ifade eder. Traversal ise Lens ve Prism'i birleştiren ve sıfır ya da daha fazla odak üzerinde çalışabilen bir optiktir. `type Traversal s t a b = forall p. (Strong p, Choice p, Traversing p) => p a b -> p s t`. Traversal'ın `Applicative` ile ilişkisi, van Laarhoven temsilinde daha doğrudan görünür; ancak profunctor temsili, composability açısından üstünlük sağlar: iki optik compose edildiğinde sonuç tipi, ilgili kısıtlamaların kesişiminden belirlenir. Profunctor optik lens prism yaklaşımının van Laarhoven temsiline üstünlüğü şuradan gelir: van Laarhoven optikler, tür çıkarımı (type inference) sorunlarıyla karşılaşabilirken profunctor temsilinde her optik türü, kendi profunctor kısıtlaması aracılığıyla açıkça ifade edilir. Bu durum, derleme zamanı hatalarının daha anlamlı olmasını sağlar ve büyük optik zincirlerinde bakımı kolaylaştırır.