2016-10-07 34 views
3

這是有道理的:列表類型簽名

test :: [[Int]] 
test = [[]] 

main = print test 

但是爲什麼這編譯(和運行)?

test :: [[Int]] 
test = [] 

main = print test 

回答

9

[[Int]]是列出的名單(智力的)和

  • [[]] - 名單與一個空表內
  • [] - 空列表
4

類型的[]是多態,即forall t. [t],這意味着它代表任何類型的空列表t。由於test[[Int]]類型,因此我們可以統一t ~ [Int],因此[]也是[[Int]]類型的空列表。