我已阅读Printing the values inside a tuple in 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)]
$
如何告诉showDetails应用于列表元素(元组)?
该行的$
免费版本是什么?
答案 0 :(得分:5)
$
只是函数应用程序:
f $ x = f x
那样放,看起来没用。但是它实际上有许多用途-最常见的用途之一是因为作为infix运算符,它的优先级低于其他任何用法。也就是说,在解析表达式时,Haskell将所有内容都放在其左侧(不包括另一个$
)和所有内容都在其右侧(同样),并有效地将双方都放在括号中。
由于$
与f $ complicatedExpression
相同,因此允许使用f (complicatedExpression)
代替括号。因此,在您的示例中:
putStrLn . unlines . map showDetails $ [("A",100,1),("B",101,2)]
与
相同(putStrLn . unlines . map showDetails) ([("A",100,1),("B",101,2)])
并且选择纯粹是文体偏好。但是大多数人更喜欢$
,尤其是因为多个$
比多重嵌套括号好得多。