我正在學習Haskell的過程。我有一個功能,如下所示:Take-Haskell列表中的問題
takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]
所有我想這事,是一個無限列表中的元素返回否的量,我不知道爲什麼這是行不通的。任何解釋如何修復它而不會放棄我的綁定(?)
我正在學習Haskell的過程。我有一個功能,如下所示:Take-Haskell列表中的問題
takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]
所有我想這事,是一個無限列表中的元素返回否的量,我不知道爲什麼這是行不通的。任何解釋如何修復它而不會放棄我的綁定(?)
這是行不通的原因是take
有類型Int -> [a] -> [a]
。該號碼必須是Int
,並且不能是任何Integral
。
您可以fromIntegral
解決這個問題:
takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]
@Carsten我不確定你的意思......上述實現在我的機器上運行。 –
你能做到不使自己的函數: 輸入>>取3 [1 ..] 輸出>> [1,2,3 ]
你得到什麼錯誤?它爲我工作。 – jamshidh
注意'takeN n = [0..n-1]'也起作用並且具有相同的含義 - '[0 ..]'可能是無限的這一事實並不重要。 –
@jamshidh你是否包含類型簽名? – PyRulez