0

我正在学习 Haskell。我有一个如下所示的函数:

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

我想要做的就是在一个无限列表中返回 n 个元素,我不知道为什么这不起作用。关于如何在不放弃我的绑定的情况下修复它的任何解释(?)

4

2 回答 2

3

这不起作用的原因是它take具有 type Int -> [a] -> [a]。数字必须是 a Int,并且不能是 any Integral

您可以通过以下方式解决该问题fromIntegral

takeN :: Integral a => a -> [a]
takeN n = take (fromIntegral n) [x | x<-[0..]]
于 2016-03-04T20:52:17.120 回答
0

您可以在不创建自己的函数的情况下做到这一点: input>> take 3 [1..] output>> [1,2,3]

于 2016-03-04T20:52:36.837 回答