为何Haskell中使用fromIntegral时指定(4 :: Integral)会报错?
Haskell代码报错原因解析
你写的代码报错核心问题在于:Integral不是具体的类型,而是类型约束(它的kind是* -> Constraint),不能直接用来给数值指定类型。
fromIntegral的类型签名明确要求第一个参数是实现了Integral约束的具体类型(比如Int、Integer这类):
fromIntegral :: (Integral a, Num b) => a -> b
你写的(4 :: Integral)试图把4的类型指定为Integral,但Haskell需要的是具体类型而非约束,所以编译器抛出错误。
正确写法
只要给4指定一个具体的Integral类型即可,比如:
-- 使用Int类型 fromIntegral (4 :: Int) :: Double -- 或者使用Integer类型 fromIntegral (4 :: Integer) :: Double
执行以上代码就能得到预期的4.0。
内容的提问来源于stack exchange,提问作者Евгений Прудилов
相关产品推荐
相关产品推荐

