記錄鏡頭
簡單記錄
{-# 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
工作所必需的。從技術上講,完全可以通過其他方式(例如手工)製作這種鏡片。