我已经阅读了在Haskell中在一个元组中打印值,该解决方案有效。我对这个问题的意图是$通过将代码“翻译”为$自由代码来了解符号的含义。
showDetails :: (String, Int, Int) -> String
showDetails (name, uid, _) = "Your name is:" ++ name ++ " Your ID is: " ++ show uid
main = do
putStrLn . unlines . map showDetails $ [("A",100,1),("B",101,2)]
Run Code Online (Sandbox Code Playgroud)
如何$告诉showDetails应用于列表元素(元组)?$那条线的免费版本是什么?
$ 只是功能应用程序:
f $ x = f x
Run Code Online (Sandbox Code Playgroud)
这样放,看起来没用。但是它实际上有很多用途-最常见的用途之一是因为它作为infix运算符的优先级比其他任何事物都要低。也就是说,在解析表达式时,Haskell将所有内容都放在其左侧(不包括another $),并将所有内容都放在其右侧(同样),并有效地将双方都放在括号中。
$由于f $ complicatedExpression与相同,因此可以用来代替括号f (complicatedExpression)。因此,在您的示例中:
putStrLn . unlines . map showDetails $ [("A",100,1),("B",101,2)]
Run Code Online (Sandbox Code Playgroud)
等同于
(putStrLn . unlines . map showDetails) ([("A",100,1),("B",101,2)])
Run Code Online (Sandbox Code Playgroud)
而选择纯粹是文体偏好。但大多数人更喜欢$,尤其是因为Multiple $优于多重嵌套的括号。