2016-03-04 69 views
0

我正在學習Haskell的過程。我有一個功能,如下所示:Take-Haskell列表中的問題

takeN :: Integral a => a -> [a] 
takeN n = take n [x | x<-[0..]] 

所有我想這事,是一個無限列表中的元素返回否的量,我不知道爲什麼這是行不通的。任何解釋如何修復它而不會放棄我的綁定(?)

+0

你得到什麼錯誤?它爲我工作。 – jamshidh

+0

注意'takeN n = [0..n-1]'也起作用並且具有相同的含義 - '[0 ..]'可能是無限的這一事實並不重要。 –

+0

@jamshidh你是否包含類型簽名? – PyRulez

回答

3

這是行不通的原因是take有類型Int -> [a] -> [a]。該號碼必須是Int,並且不能是任何Integral

您可以fromIntegral解決這個問題:

takeN :: Integral a => a -> [a] 
takeN n = take (fromIntegral n) [x | x<-[0..]] 
+0

@Carsten我不確定你的意思......上述實現在我的機器上運行。 –

0

你能做到不使自己的函數: 輸入>>取3 [1 ..] 輸出>> [1,2,3 ]