[英]What’s going on with these Haskell types?
為什么這個 function 需要一個整數列表?
Prelude> :t \xs->[(map $ uncurry(*)) (zip xs [1..n]) | n<-[1..(length xs)]]
\xs->[(map $ uncurry(*)) (zip xs [1..n]) | n<-[1..(length xs)]]
:: [Int] -> [[Int]]
當我用固定值替換length xs
時,類型會發生變化並且不再那么嚴格:
Prelude> :t \xs->[(map $ uncurry(*)) (zip xs [1..n]) | n<-[1..100]]
\xs->[(map $ uncurry(*)) (zip xs [1..n]) | n<-[1..100]]
:: (Num b, Enum b) => [b] -> [[b]]
我的編譯器是
$ ghci --version
The Glorious Glasgow Haskell Compilation System, version 8.8.4
length
的類型為[a] -> Int
,這意味着length xs
是一個Int
值。
另一方面, 100
不是Int
文字,而是Num a => a
類型的多態文字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.