记录-输出-预处理器:允许record.field语法的预处理器

[bsd3型发展图书馆程序][建议标签]

几乎在每种编程语言中a.b公司将获得b条字段数据类型,许多不同的数据类型可以有b条字段。此功能之所以普遍存在,是因为它有用的.这个记录-输出-预处理器将此功能引入Haskell-有关详细信息,请参阅README。


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 0.10.1.10.1.20.1.30.1.40.1.50.20.2.10.2.20.2.30.2.40.2.50.2.60.2.70.2.80.2.90.2.100.2.110.2.120.2.130.2.140.2.150.2.160.2.17
更改日志 更改.txt
依赖关系 基础(>=4.8 && <5)额外的温室气体(>=8.6 && <9.9)单板的[细节]
许可证 BSD-3条款
版权 尼尔·米切尔2018-2024
作者 尼尔·米切尔<ndmitchell@gmail.com>
维护人员 尼尔·米切尔<ndmitchell@gmail.com>
类别 开发
主页 https://github.com/ndmitchell/record-dot-preprocessor#自述文件
Bug跟踪器 https://github.com/ndmitchell/record-dot-preprocessor/issues
源回购 头部:git克隆https://github.com/ndmitchell/record-dot-preprocessor.git
已上传 通过尼尔·米切尔2024-01-13T21:56:44Z
分配 尼克斯(NixOS):0.2.17,堆叠:0.2.17
反向依赖关系 5直接,2间接[细节]
可执行程序 记录-输出-预处理器
下载 总计11007人(过去30天内有89人)
额定值 2.0(票数:1)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
截至2024-01-13,所有报告的构建都失败[所有1个报告]

record-dot-preprocessor-0.2.17自述文件

[返回包描述]

记录-输出-预处理器黑客版本 堆叠版本 生成状态

几乎在每种编程语言中a.b公司将获得b条来自的字段数据类型,许多不同的数据类型可以有b条字段。此功能之所以普遍存在,是因为它有用的. The记录-输出-预处理器将此功能引入现代GHC版本。此功能已经为Haskell提议作为记录点语法自GHC 9.2以来重载RecordDot过载的记录更新扩展实现了大致相同的功能。一些示例:

data Company=公司{name::String,所有者::Person}data Person=Person{name::String,age::Int}显示::公司->字符串显示c=c.name++“由”++c.owner.name运行nameAfterOwner::公司->公司nameAfterOwner c=c{name=c.owner.name++“的公司”}

这里我们声明两条记录名称作为字段,然后写入c.名称c.所有者名称获取这些字段。我们也可以写c{name=x}作为记录更新,即使名称不再是唯一的。

我该如何使用这个魔法?

第一次安装记录-输出-预处理器无论是哪一种堆栈安装record-dot-preprocessorcabal更新和cabal安装record-dot-preprocessor。然后在文件顶部添加:

  • 要么:{-#OPTIONS_GHC-F-pgmF=记录dot-预处理器#-}用于预处理器。
  • 或者:{-#OPTIONS_GHC-fplugin=记录点预处理器#-}{-#LANGUAGE DuplicateRecordFields、TypeApplications、FlexibleContexts、DataKinds、MultiParamTypeClasses、TypeSynonymInstances、FlexibleInstance、UndecitableInstances和GADTs#-}用于GHC插件。

GHC插件仅在GHC 8.6或更高版本上运行,在Windows上有一些问题并且有更好的错误消息。相比之下,预处理器无处不在,并且具有更多功能。

你必须确保选项_GHC同时应用于文件定义记录的位置、和使用记录语法的位置。生成的程序将需要记录-哈斯菲尔德图书馆.

确切地说,有什么魔法可用?

使用预处理器或GHC插件,您可以编写:

  • expr.lbl(表达.lbl)等于getField@“lbl”表达式(该.两边不能有空格)。
  • 表达式{lbl=val}等于setField@“lbl”expr值(该{前面不能有空格)。
  • (磅)等于(\x->x.lbl)(该.后面不能有空格)。

使用预处理器,但GHC插件:

  • 表达式{lbl1.lbl2=val}等于expr{lbl1=(expr.lbl1){lbl2=val}},执行嵌套更新。
  • 表达式{lbl*val}等于expr{lbl=expr.lbl*val},其中*可以是任何运算符。
  • 表达式{lbl1.lbl2}等于表达式{lbl1.lbl2=lbl2}.

这些表格结合起来提供了身份:

  • 表达式lbl.lbl2等于(表达lbl1)lbl2.
  • (.lbl1.lbl2)等于(\x->x.lbl1.lbl2).
  • 表达式lbl1{lbl2=val}等于(表达式lbl1){lbl2=val}.
  • 表达式{lbl1=val}.lbl2等于(表达式{lbl1=val}).lbl2.
  • 表达式{lbl1.lbl2*val}等于expr{lbl1.lbl2=expr.lbl.lbl2*val}.
  • 表达式{lbl1=val1,lbl2=val2}等于(表达式{lbl1=val1}){lbl2=val2}.

这个魔法和其他魔法相比怎么样?

哈斯克尔的记录是众所周知的相当糟糕。有许多建议目的是利用从类型系统和范畴理论中提取的黑暗艺术,使哈斯克尔的记录更加强大。这个预处理器的目的是简化——将现有元素组合成连贯的故事。其目的是做到不比Java差,而不是达到完美。

使用这个魔法有什么建议吗?

最重要的考虑是a.b公司a{b=c}语法必须哈斯菲尔德实例,这需要在定义它们的模块上运行预处理器/插件,或者手动编写孤立实例。要使用没有此类实例的记录,请使用正常的选择器功能(例如。b和a)并在{(例如。a{b=c}).

限制

  • 预处理器不处理内部的反引号表达式拟引号,例如。[D.pgSQL|$SECT${dumm.x}::text|].