关于haskell:将美元符号表示法转换为点符号

Converting dollar sign notation to dot notation

本问题已经有最佳答案,请猛点这里访问。

我如何用点符号把下面的内容变成同一个函数?

1
 print $ map (`elem` Emoji.table) keywords


您可以一次转换一点表达式:

1
2
3
4
print $ map (`elem` Emoji.table) keywords
print (map (`elem` Emoji.table) keywords)
(print . map (`elem` Emoji.table)) keywords
print . map (`elem` Emoji.table) $ keywords

当你有f $ g x时,你有f (g x),也就是说你有(f . g) xf . g $ x。在上面的例子中,当fprintgmap ('elem' Emoji.table)时,用.表示成分似乎没有什么好处,但在其他情况下可能更易读。

例如,如果编写的是无点函数:

1
2
printWithEmojis :: Keywords -> IO ()
printWithEmojis keywords = print $ map (`elem` Emoji.table) keywords

然后您还可以预计到减少:

1
2
printWithEmojis :: Keywords -> IO ()
printWithEmojis = print . map (`elem` Emoji.table)

1
(print . map (`elem` Emoji.table)) keywords

我替换了地图操作员和列表来尝试并使用

(print . map (==1)) [1..2]

print $ map (==1) [1..2]

$运算符在后面的所有内容周围添加括号,例如,foo bar $ baz qux等于foo bar (baz qux)

.运算符是组成的简写,如(f . g) xf (g x)相同。