如何将以下内容与点符号合并为同一函数?
print $ map (`elem` Emoji.table) keywords
您可以一次稍微转换表达式:
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) x
或f . g $ x
。在上面的例子中,f
print
,g
是map ('elem' Emoji.table)
,似乎没有什么好处可以用.
来表达作曲,但在其他情况下它可能更具可读性。
例如,如果您正在编写一个无点函数:
printWithEmojis :: Keywords -> IO ()
printWithEmojis keywords = print $ map (`elem` Emoji.table) keywords
然后你也可以减少ETA-rech:
printWithEmojis :: Keywords -> IO ()
printWithEmojis = print . map (`elem` Emoji.table)
(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) x
与f (g x)
相同