良好的 Haskell 编码标准

2023-12-21

有人可以提供一个良好的 Haskell 编码标准的链接吗?我发现了this http://urchin.earth.li/~ian/style/haskell.html and this http://www.haskell.org/haskellwiki/Programming_guidelines,但它们还远远不够全面。更不用说 HaskellWiki 中包含了诸如“小心使用类”和“定义符号中缀标识符应该只留给库编写者”这样的“宝石”。


真的很难回答。我希望你的回答能带来好的结果。同时,这里是我在初学者代码中发现的错误或其他烦人的事情的目录。与 Kornel Kisielewicz 指出的加州理工学院风格页面有一些重叠。我的一些建议与 HaskellWiki“宝石”一样模糊且无用,但我希望至少这是更好的建议:-)

  • 设置代码格式,使其适合 80 列。 (高级用户可能更喜欢 87 或 88;除此之外就是推动它。)

  • 别忘了let绑定和where子句创建相互递归的定义嵌套,not a sequence的定义。

  • 利用where子句,尤其是它们查看已经在范围内的函数参数的能力(很好的模糊建议)。如果你真的很了解 Haskell,你的代码应该有更多内容where- 绑定比let- 绑定。太多let-bindings 是未重构的 ML 程序员或 Lisp 程序员的标志。

  • 避免多余的括号。一些多余括号特别令人反感的地方是

    • 周围的条件在if表达式(将你标记为一个未经改造的 C 程序员)

    • 围绕函数应用程序,函数应用程序本身就是中缀运算符的参数 (函数应用程序比任何中缀运算符绑定更紧密。这个事实应该铭刻在每个 Haskeller 的大脑中,就像我们恐龙铭记 APL 从右到左的扫描规则一样。)

  • 在中缀运算符周围放置空格。在元组文字中的每个逗号后面放置一个空格。

  • 最好在函数和它的参数之间有一个空格,即使参数是用括号括起来的。

  • Use the $运算符明智地减少括号。留意之间的密切关系$和中缀.:

    f $ g $ h x == (f . g . h) x == f . g . h $ x
    
  • 不要忽视内置的Maybe and Either types.

  • 从来不写if <expression> then True else False;正确的短语是<expression>.

  • 不要使用head or tail当你可以使用模式匹配时。

  • 不要忽视带有中缀点运算符的函数组合。

  • 小心使用换行符。换行符可以提高可读性,但需要权衡:您的编辑器一次可能只显示 40-50 行。如果您需要一次阅读并理解一个大函数,则不得过度使用换行符。

  • 几乎总是更喜欢--注释运行到行尾{- ... -}评论。大括号注释可能适合大标题——仅此而已。

  • 为每个顶级函数提供显式类型签名。

  • 如果可能的话,对齐-- lines, =符号,甚至相邻行中出现的括号和逗号。

  • 受 GHC Central 的影响,我对使用有非常温和的偏好camelCase对于导出的标识符和short_name本地带有下划线where-结合或let绑定变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

良好的 Haskell 编码标准 的相关文章

  • Haskell 输入返回元组

    我想知道 IO 函数是否可以返回元组 因为我想从这个函数中获取这些元组作为另一个函数的输入 investinput IO gt Char Int investinput do putStrLn Enter Username username
  • 带有 RankNTypes 扩展的奇怪类型推断

    我正在尝试在 Haskell 中尝试 System F 类型 并通过以下方式实现了自然数的 Church 编码type 当加载这段代码时 OPTIONS GHC Wall LANGUAGE RankNTypes type CNat fora
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 迭代打印列表中的每个整数

    假设我有一个整数列表l 1 2 我想打印到stdout Doing print l产生 1 2 假设我想打印不带大括号的列表 map print l产生 No instance for Show IO arising from a use
  • 在另一个字符串中查找子字符串的索引 Haskell

    我要创建一个带有两个参数 字符串 的函数 该函数应查看第一个参数是否是第二个参数的子字符串 如果是这种情况 它将返回每个出现的元组 其中包含子字符串的起始索引和子字符串的结尾索引 例如 f String gt String gt Int I
  • Haskell 项目可以使用 cmake 吗?

    我正在计划一个用 Haskell 编写的项目 也许也有一些部分是用 C 编写的 对于构建系统 我决定不选择 Haskell 程序 cabal 的常见选择 主要是因为我想了解其他语言的构建程序是如何工作的 我听说过 CMake 我认为这是一个
  • 这个花括号约定的名称是什么?

    我对看到有多少开发人员在类名或方法下方使用大括号编写方法和类感到有点困惑 他们遵循什么惯例 Sun 明确指出 http www oracle com technetwork java codeconventions 141270 html
  • 函数式语言中的部分求值和函数内联有什么区别?

    我知道 函数内联就是用函数定义代替函数调用 部分评估是在编译时评估程序的已知 静态 部分 在 C 等命令式语言中 两者之间存在区别 其中运算符与函数不同 但是 在像 Haskell 这样的函数式语言 其中运算符也是函数 中 两者之间有什么区
  • LaTeX 报告章节样式

    如何更改 LaTeX 报告类中的章节样式 我发现了一些关于 makechapterstyle 但它似乎不适用于报告 或者至少不适用于my报告 我很确定一定有某种方法可以改变这一点 我知道 LaTeX 不太适合编程 但我不知道有什么更好的地方
  • 在 Haskell 中将字符串转换为整数/浮点数?

    data GroceryItem CartItem ItemName Price Quantity StockItem ItemName Price Quantity makeGroceryItem String gt Float gt I
  • 如何在 Haskell Pipes 中将两个 Consumer 合并为一个?

    我使用Haskell流处理库pipes https hackage haskell org package pipes编写一个命令行工具 每个命令行操作都可以将结果输出到stdout并记录到stderr with pipes API I n
  • 管道 - 将多个来源/生产者合并为一个

    我正在使用读取文件sourceFile 但我还需要在处理操作中引入随机性 我认为最好的方法是拥有一个这样的制片人 Producer m StdGen ByteString 其中 StdGen 用于生成随机数 我打算让生产者执行 source
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 使用 Haskell 绘制图表

    是否可以使用 Haskell 绘制一个简单的图表 你们中的任何人都可以告诉我该怎么做吗 该图应至少包含 3 个点 Haskell 图表 https github com timbod7 haskell chart似乎不错 The wiki
  • Haskell / cabal 包的解决方法受到 Nix 和 Cabal 的限制?

    我最近开始开发反射平台 https github com reflex frp reflex platform 有一些额外的配置类似于优秀的反射项目骨架 https github com ElvishJerricco reflex proj
  • Python 比编译的 Haskell 更快?

    我有一个用 Python 和 Haskell 编写的简单脚本 它读取包含 1 000 000 个换行符分隔的整数的文件 将该文件解析为整数列表 对其进行快速排序 然后将其写入已排序的不同文件中 该文件与未排序的文件具有相同的格式 简单的 这
  • 这是 unsafeCoerce 的安全使用吗?

    我遇到的情况是 我目前正在使用极其可怕的函数 unsafeCoerce 幸运的是 这并不是为了任何重要的事情 但我想知道这是否是该函数的安全使用 或者是否有其他方法可以解决其他人知道的这个特定问题 我的代码类似于以下内容 data Toke
  • 如何让 esqueleto 为我生成 SQL 字符串?

    我怎样才能让esqueleto从a生成一个SQL字符串from陈述 的文档toRawSql说 你可以打开持久的查询日志记录 我尝试了所有可能的形式MonadLogger我可以理解 但它从未打印任何 SQL 同一文档还说 手动使用此功能 是可

随机推荐

  • 使用 GPU 获取数字列表的统计信息

    我的文件中有几个数字列表 例如 333 324 123 543 00054 2243 333 53343 4434 现在 我想使用 GPU 获取每个数字出现的次数 我相信这在 GPU 上比在 CPU 上执行得更快 因为每个线程可以处理一个列
  • 在 Matlab 中创建“多孔”中值滤波器

    我需要做的是在 Matlab 中创建一种用于图像处理的 特殊 中值滤波器 多孔 中值滤波器 这是一个排除区域中心元素的过滤器 对于标准中值滤波器 我使用medfilt2函数 但我无法将其掩码 内核 作为矩阵传递 它不是线性变换 例如 使用标
  • JPA Map 映射

    如何在不使用 Hibernate 类的情况下在 JPA 中映射 Map 虽然Subhendu Mahanta给出的答案是正确的 但 CollectionOfElements已弃用 您可以使用 ElementCollection反而 Elem
  • 如何格式化 R Shiny numericInput?

    我有一个闪亮的应用程序 其中有很多numericInput字段 我想要一种格式化的方法numericInput每 10 3 之间用逗号分隔的字段 例如 我想要 5 000 000 而不是 5000000 我可以在 R 中使用format a
  • knitr 中的 dygraph 不起作用

    当尝试使用 Knit 在 R 中编织我的 dygraph 时 library dygraphs dygraph nhtemp main New Haven Temperatures gt dyRangeSelector dateWindow
  • Azure 门户看不到 DevOps 组织 [帐户问题?]

    我在将 Azure Web App 连接到 Azure DevOps 组织时遇到问题 我以某种方式设法为一个 Web 应用程序做到了这一点 通过选择创建一个新的 DevOps 项目 但现在很难设置一个新的 Web 应用程序来链接到同一个 D
  • 反应本机如何将图像和onpress添加到可触摸中

    我在反应本机中有可触摸的 在可触摸的内部我有图像并且在新闻上像这样
  • Keras 有没有办法立即停止训练?

    我正在为我的自定义提前停止回调tf keras训练 为此我可以设置变量self model stop training True在回调函数之一中 例如on epoch end 然而 Keras 仅在当前 epoch 完成时才停止训练 即使我
  • 在 Java 中从 JButton 拖放到 JComponent

    我在互联网上搜索了如何将 JButton 拖放到对象的示例 但我无法使其工作 我的程序所做的是 当我单击按钮时 对象更新了一个字段 使用选定的 object setField 我希望能够通过拖动 JButton 而不是单击来完成此操作 我怎
  • 赋值的左侧必须是变量[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于以下方法 Override public void onCreateContextMenu ContextMenu menu
  • 找到第二大的元素

    在给定的数组中如何找到第二个 第三个 第四个或第五个值 另外 如果我们使用max python中的函数的复杂性顺序是多少 即与该函数相关的顺序max def nth largest li n li remove max li print m
  • VBA:字典内存问题?填充 dict、.removeall、填充问题

    因此 我在这里使用了一些代码 其中我使用一个字典来填充作为自定义类中的属性保存的两个不同的字典 我这样做是为了效率 注意 我有一个解决此问题的方法 即为我想要设置的每个属性使用字典 但这并不是太有效 大致这是我的代码 for iKey 1
  • ORDER_BY 日期 LIMIT 1 [重复]

    这个问题已经存在了 我有一个名为 notify 的表 其中包含 寻求者 捐赠者 日期 列 datetime 类型的日期列 它存储以下格式 YYYY MM DD HH MM SS我正在尝试从通知表中选择具有最新日期的 1 条记录 然后将该日期
  • WPF Datagrid selectitem = MVVM 中的 null

    我正在尝试使用 MVVM 模式来处理数据网格 问题是 每当我将绑定到 SelectedItem 的 VM 属性更改为 null 时 视图不会 取消选择 当前选定的项目 这是我在 xaml 中的绑定
  • 如何查找页面中的所有元素

    我知道有两种方法可以找到页面中的所有元素 document getElementsByTagName and document all 有更好的方法还是其中最好的方法之一 我正在制作一个元素选择器 主要用于练习 我想知道获取页面中所有元素的
  • 使用分类数据的Python堆积条形图

    我有一个 Pandas 数据框 1800 obs 看起来像这样 A B C D 1 CL0 CL1 CL2 CL0 2 CL2 CL1 CL1 CL3 3 CL3 CL2 CL0 CL1 n CL2 CL1 CL0 CL3 我想创建一个堆叠
  • 映射到 PetaPoco 中的集合?

    有没有办法将以下内容映射到Dictionary
  • 如何将“无”分配给 std::Optional

    阅读有关std optional http en cppreference com w cpp utility optional 我对分配值的标准方法感到困惑某物 and nothing to an optional I guess ope
  • 字典(键,值)顺序

    假设我有以下代码 var dictionary cat 2 dog 4 snake 8 mutable dictionary var keys dictionary keys var values dictionary values for
  • 良好的 Haskell 编码标准

    有人可以提供一个良好的 Haskell 编码标准的链接吗 我发现了this http urchin earth li ian style haskell html and this http www haskell org haskellw