我正在学习Haskell。我有一个看起来如下的函数:
takeN :: Integral a => a -> [a]
takeN n = take n [x | x<-[0..]]
我想要这样做,是在无限列表中返回n个元素,并且我不知道为什么这不起作用。如何解决它而不放弃我的绑定的任何解释(?)
答案 0 :(得分:3)
这不起作用的原因是take
的类型为Int -> [a] -> [a]
。该号码必须为Int
,且不能为Integral
。
您可以使用fromIntegral
解决问题:
takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]
答案 1 :(得分:0)
你可以不用自己的功能去做: 输入&GT;&GT;拿3 [1 ..] 输出&GT;&GT; [1,2,3]