我有一段时间正在研究Haskell,所以我是新手.
以下代码非常容易理解:
purStrLn $ show [1]
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以推断出所有类型(默认值),并且一切运行良好.但是以下代码也适用:
putStrLn $ show []
Run Code Online (Sandbox Code Playgroud)
即使我们无法推断列表类型.
如果我用ghci执行代码,我会得到以下内容:
Prelude> []
[]
Prelude> :t it
it :: [a]
Prelude>
Run Code Online (Sandbox Code Playgroud)
所以类型似乎是多态的.但在这种情况下,将使用部分应用类型调用该节目.
相同的行为在其他类型中很常见,例如使用Data.Map.empty,因此它不是列表功能(或者至少看起来像它).
为什么以及如何运作?