首页 > 解决方案 > 我的 sqrt 函数不会在 GHCi 中编译

问题描述

标签: haskelltype-conversion

解决方案


(**) :: Floating a => a -> a -> a只能应用于Floating类型,并且还要求操作数和结果都具有相同的类型。

另一方面,您的类型签名说那x是一个Int(一个Int不是类型类的成员),而且应该返回一个,所以这违反了的类型签名。Floatingx ** 0.5Float(**)

我们可以将类型类成员的任何类型转换为Integral类型类成员的任何Num类型fromIntegral :: (Integral a, Num b) => a -> b 。在这种情况下fromIntegral,将因此将 a 转换Int为 a Float

sqrt' :: Int -> Float
sqrt' x = fromIntegral x ** 0.5

推荐阅读