Haskell Language Lenti per dischi


Esempio

Registrazione semplice

{-# LANGUAGE TemplateHaskell #-}
import Control.Lens

data Point = Point {
    _x :: Float,
    _y :: Float
}
makeLenses ''Point

Gli obiettivi x e y sono creati.

let p = Point 5.0 6.0 
p ^. x     -- returns 5.0
set x 10 p -- returns Point { _x = 10.0, _y = 6.0 }
p & x +~ 1 -- returns Point { _x = 6.0, _y = 6.0 }

Gestione dei record con nomi di campi ripetuti

data Person = Person { _personName :: String }
makeFields ''Person

Crea una classe di tipo HasName , name dell'obiettivo per Person e rende Person un'istanza di HasName . I record successivi verranno aggiunti anche alla classe:

data Entity = Entity { _entityName :: String }
makeFields ''Entity

L'estensione Template Haskell è necessaria per il makeFields per funzionare. Tecnicamente, è possibile creare le lenti in questo modo con altri mezzi, ad esempio a mano.