簡體   English   中英

這些 Haskell 類型是怎么回事?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM