我刚从makeClass
包中发现了lens
。它允许你做像
data Point2 = Point2 { _x:: Double, _y :: Double }
makeClassy ''Point2
data Point3 = Point3 { _p2 : Point2, _z :: Double}
makeclassy ''Point3
instance HasPoint2 Point3 where
point2 = p2
然后您可以执行
之类的操作p3 = Point3 (Point 2 1 2) 3
p3 ^. x -- 1
p3 ^. y -- 2
p3 ^. z -- 3
哪个很棒。但是,有没有办法在一步中重新组合makeClassy
和instance HasPoint2
?