Как я могу сложить Double
с? Я думал, что sum
будет работать из коробки, и когда я просто использую вывод типа, это действительно кажется, но когда я даю сигнатуру типа, фиксирующую тип вывода на Double
, сумма становится бесконечной!
Это не работает:
doubles :: Int -> Int -> Double
doubles maxk maxn = sum [1/(fromIntegral(i*(j+1)^(2*i)))|i<-[1..maxk],j<-[1..maxn]]
Я вижу это поведение:
*Main> doubles 20 1500
Infinity
Однако, без подписи типа, тот же код:
doubles maxk maxn = sum [1/(fromIntegral(i*(j+1)^(2*i)))|i<-[1..maxk],j<-[1..maxn]]
Дает разумный ответ:
*Main> doubles 20 1500
0.692481179869307
Что дает?