記錄鏡頭
簡單記錄
{-# LANGUAGE TemplateHaskell #-}
import Control.Lens
data Point = Point {
_x::Float,
_y::Float
}
makeLenses ''Point
透鏡 x 和 y 被建立。
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 }
使用重複欄位名稱管理記錄
data Person = Person { _personName::String }
makeFields ''Person
為 Person 建立一個型別類 HasName,lens name,並使 Person 成為 HasName 的一個例項。後續記錄也將新增到該類中:
data Entity = Entity { _entityName::String }
makeFields ''Entity
模板 Haskell 擴充套件是 makeFields 工作所必需的。從技術上講,完全可以通過其他方式(例如手工)製作這種鏡片。