2016-03-04 2 views
0

Я в процессе обучения Haskell. У меня есть функция, которая выглядит следующим образом:Проблемы с 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

@ Карстен Я не уверен, что вы имеете в виду ... Вышеупомянутая реализация работает на моей машине ™. –

0

Вы можете сделать это, не делая свою собственную функцию: вход >> принять 3 [1 ..] выход >> [1,2,3 ]

Смежные вопросы