記錄鏡頭

簡單記錄

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

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

透鏡 xy 被建立。

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