当前位置: 首页 > 编程笔记 >

Haskell记录镜头

督弘化
2023-03-14
本文向大家介绍Haskell记录镜头,包括了Haskell记录镜头的使用技巧和注意事项,需要的朋友参考一下

示例

简单记录

{-# 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

创建一个类型HasName,透镜name为Person,使Person的一个实例HasName。随后的记录也将添加到该类中:

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

必须使用Template Haskell扩展程序makeFields才能正常工作。从技术上讲,完全有可能通过其他方式(例如手工)制作以这种方式制成的镜片。

 类似资料:
  • 本文向大家介绍Haskell优雅的镜片,包括了Haskell优雅的镜片的使用技巧和注意事项,需要的朋友参考一下 示例 除了makeLenses用于生成Lenses的标准功能外,Control.Lens.TH还提供该makeClassy功能。makeClassy具有相同的类型,并以与基本上相同的方式工作makeLenses,但有一个关键区别。除了生成标准的镜头和遍历之外,如果该类型没有参数,它还将创

  • 本文向大家介绍Haskell语言有状态透镜,包括了Haskell语言有状态透镜的使用技巧和注意事项,需要的朋友参考一下 示例 镜头运算符具有在有状态上下文中运行的有用变体。他们通过替换获得~与=在运营商的名称。 注意:有状态变体不应更改类型,因此它们具有Lens'或Simple Lens'签名。 摆脱&束缚 如果需要将具有镜头功能的操作链接起来,通常看起来像这样: 这项工作得益于的关联性&。不过,

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格或外键数据选择时每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 “开始事务”按钮来手动开始事务。 在数据查看器中打开事务时,可

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 按钮来手动开始事务。 在数据查看器中打开事务时,可以使用 或 按钮来提交或回滚

  • 记录 限制记录 条记录 (每页) 如果你想全局地限制在网格或外键数据选择时每页显示的记录数,可勾选这个选项。否则,所有记录将会显示在一页里。 【注意】若要为特定的表或集合调整设置,请参阅数据查看器。 自动开始事务 如果你需要在更改表或集合中的记录时,自动开始一个新事务,可勾选这个选项。否则,自动提交会自动启用,你需要在数据查看器中点击 “开始事务”按钮来手动开始事务。 在数据查看器中打开事务时,可

  • 问题内容: 我想在我的应用程序中将slf4j + logback用于两个目的-日志和审计。 对于日志记录,我以常规方式记录日志: 对于审计,我创建一个特殊的命名记录器并登录到它: 登录配置: 问题:通过审核记录器记录的消息出现两次-一次在AUDIT_LOGGER下,一次在根记录器下。 14:41:57.975 [main]调试com.gammay.example.Main–> main() 14: