是否可以使用Int->;类型编写Haskell函数;浮动

是否可以使用Int->;类型编写Haskell函数;浮动,haskell,Haskell,我会写字 double :: Int -> Float double i = 2.0 但这绝不是它的论点的函数。演员阵容显然是 禁止,混合模式算法不受支持,所以我不能做类似的事情 double :: Int -> Float double i = 2.0 * i 我实际上是想弄清楚如何定义 series :: (Int -> Float) -> Int -> [Float] 返回无穷级数[f(i),f(i+1),f(i+2),…] 但我一直在计算f(I) 如果

我会写字

double :: Int -> Float
double i = 2.0
但这绝不是它的论点的函数。演员阵容显然是 禁止,混合模式算法不受支持,所以我不能做类似的事情

double :: Int -> Float
double i = 2.0 * i
我实际上是想弄清楚如何定义

series :: (Int -> Float) -> Int -> [Float]
返回无穷级数[f(i),f(i+1),f(i+2),…] 但我一直在计算f(I)

如果这真的不可能,我必须使用什么类型


谢谢

我认为您正在寻找
from integral
函数。

Michael Snoyman的答案是实用的,但让我告诉您,如果
from integral
不存在,您可以做些什么。首先,超慢版本:

intToFloat :: Int -> Float
intToFloat x
  | x > 0 = - itf (- x)
  | otherwise = itf x

-- Convert a negative Int to a Float
itf 0 = 0
itf x = itf (x + 1) - 1

这很慢,而且可能会占用大量内存。但我们可以通过分裂的力量来解决它!不幸的是,我现在不能写出来。

注意
系列的类型::(积分a,数值b)=>(a->b)->a->[b]
,甚至
枚举a
,是一个更抽象的变体,遵循(可能)相同的实现。请注意,几乎肯定要使用
双精度
,这是一个双精度浮点数,而不是
Float
,它是单精度的,实际上只适用于特殊情况。谢谢。我以前试过,但没有成功,但现在成功了。我不知道我做了什么不同,但现在我又取得了进步。我可以看到为什么这会很慢,但我不知道在什么时候它会变成一个浮动。当数字对于整数来说太大时?但在这种情况下,浮点数就错了。愚蠢的问题:是不是某种类型的类型转换允许你说0==0.0,然后递增到x?