5

我写了这段代码:

import GHC.Float                                                                 

next :: GHC.Float -> GHC.Float-> GHC.Float                                         
next n x = (x + n / x) / 2

我收到以下错误:

numerical.hs:3:9:
    Not in scope: type constructor or class `GHC.Float'

numerical.hs:3:22:
    Not in scope: type constructor or class `GHC.Float'

numerical.hs:3:34:
    Not in scope: type constructor or class `GHC.Float'

模块导入没有任何问题,所以我不确定我是否用错误的名称引用它,或者标准 Float 模块是否与 IEEE GHC.Float 相同,并且不需要显式导入它。

我尝试做一个import GHC.Float as Fl没有成功 - 在Fl.

我刚刚开始 Haskell(显然),所以任何帮助表示赞赏!

4

1 回答 1

5

您不必GHC.Float手动导入,您只需编写Float,就像这样

next :: Float -> Float -> Float
next n x = (x + n / x) / 2

PreludeGHC 隐式导入在您拥有的每个源文件中 调用的模块。Prelude包括许多方便的类型、函数和其他用作语言“内置”的东西。, , ,等类型和Int, Float,等函数。MaybeIOhead+/


isIEEE您可以使用模块中的函数测试浮点数是否为 IEEE 浮点数GHC.Float

import GHC.Float

main = do
    putStr "1.0 is an IEEE floating point: "
    print $ isIEEE (1.0 :: Float)

如果你运行它,它将打印True


我还应该提到,您的代码没有更早编译的原因是因为当您使用 just 导入模块时import,它的所有内容都进入范围。您可以使用 强制它被限定import qualified,这里有几个例子:

import GHC.Float -- Everything now in scope
import qualified Data.Maybe -- Have to use full name
import qualified Data.List as L -- aliased to L

main = do
    -- Don't have to type GHC.Float.isIEEE
    print $ isIEEE (1.0 :: Float)
    -- Have to use full name
    print $ Data.Maybe.isJust $ Nothing
    -- Uses aliased name
    print $ L.sort [1, 4, 2, 5, 3]
于 2013-09-26T15:05:31.333 回答