Я знаю, что нет «слепка» в Haskell, но у меня есть это выражение:Тип отлит в Haskell
o = sum . takeWhile (< 10000) . filter odd . map (^2) $ [1..]
Я хотел бы иметь результат в виде Double. Я пробовал:
g :: (Integral c, Double b) => [c] -> b
g =sum . takeWhile (< 10000) . filter odd . map (^2)
и другие вещи, как ... Я всегда получаю сообщение об ошибке. Как я могу это сделать?
«Двойной» тип, а не тип. Правильной сигнатурой типа является 'g :: Integral c => [c] -> Double' или более общий' g :: (Num a, Integral c) => [c] -> a' В общем, вы можете использовать 'fromIntegral' для преобразования любого интегрального типа в любой другой числовой тип:' g = fromIntegral. сумма. takeWhile (<10000). фильтр нечетный. map (^ 2) '. – user2407038
@ user2407038 вы должны сделать это в ответ! – Carsten
@ user2407038 Большое спасибо за быстрый и интересный ответ. – user3166747