Cod*_*ein 3 parameters haskell map partial-application pointfree
在我调试的Haskell项目中,代码中的实例map仅使用一个参数 - 列表 - 被传递.
例如
printReports :: [Report] -> IO ()
printReports = putStrLn . unlines . map show
Run Code Online (Sandbox Code Playgroud)
和
printRuns' :: [Run] -> IO ()
printRuns' = putStrLn . unlines . map showRecipes'
Run Code Online (Sandbox Code Playgroud)
map在这种情况下意味着什么/做什么?
kaa*_*aan 10
地图类型:
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
所以,你必须提供从功能a到b和类型的列表a.
在您的示例中,函数已经给出(show和showRecipes'),因此,您只需要提供printReports和printRuns'列表.
那里发生的事情称为部分应用函数,请参见 http://www.haskell.org/haskellwiki/Partial_application
mhw*_*bat 10
正如其他人所说,这map show是一个部分应用的功能,阅读它是一个好主意.但是你给出的代码也是无点编程风格的一个例子,你可能更容易理解它.该函数printReports也可以写成
printReports xs = (putStrLn . unlines . map show) xs
Run Code Online (Sandbox Code Playgroud)
或者,等效地,
printReports xs = putStrLn . unlines . map show $ xs
Run Code Online (Sandbox Code Playgroud)
一般来说,以下所有内容都是等效的:
myFunction x y z = someExpression x y z
myFunction x y = someExpression x y
myFunction x = someExpression x
myFunction = someExpression
Run Code Online (Sandbox Code Playgroud)
这有点过于简单了,但它会让你开始.
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |