【问题标题】:Haskell desugar syntaxHaskell 脱糖语法
【发布时间】:2015-05-24 06:07:31
【问题描述】:

Shuklan 的 Haskell Lecture 想要将以下代码脱糖:

main = do
  putStrLn "Enter name:"
  name <- getLine
  putStrLn ("Hi " ++ name)

我想出了:

main = putStrLn "Enter name:" >> getLine >>= \str -> putStrLn ("Hi " ++ str)

他透露:

main = putStrLn "Enter name:" >> getLine >>= putStrLn . ("Hi " ++)

以前从未见过这种语法,它是如何工作的?

【问题讨论】:

  • 其实你的风格在绑定的变量方面更准确,但它可以写成任何一种方式。
  • 您的版本是正确的脱糖版本。给定的答案做了额外的工作。
  • 脱糖不执行无点转换。将\str -&gt; putStrLn ("Hi " ++ str) 替换为putStrLn . ("Hi " ++) 是脱糖规则中未指定的额外工作。

标签: haskell syntactic-sugar


【解决方案1】:

sn-ps 是相同的,后者只是使用point free 样式(也被称为“无意义的样式”)。

中心点是("Hi " ++) 是部分应用的(++),它将"Hi " 预先添加到输入中。

此函数与putStrLn 组合(使用.)以获取在输入前添加“Hi”然后打印它的函数。

这正是您更明确的 lambda 所做的。

【讨论】:

  • 对我来说应该很明显。想多了。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 2014-01-03
  • 1970-01-01
  • 2015-08-22
  • 2020-01-24
  • 2021-07-09
  • 2011-12-23
  • 2014-03-30
相关资源
最近更新 更多