在Haskell(macports)中的负数双精度或浮点数

5
当我尝试显示负double或float时,为什么会出现分段错误?对于负整数没有问题。
Prelude> let a = 4
Prelude> :t a
a :: Integer
Prelude> let b = -4
Prelude> b
-4
Prelude> :t b
b :: Integer
Prelude> let c = 5.6
Prelude> :t c
c :: Double
Prelude> let d = -5.6
Prelude> :t d
d :: Double
Prelude> show d
"-Segmentation fault

我尝试了多种方式,似乎数字被正确理解但未显示。版本信息:

ghci --version
The Glorious Glasgow Haskell Compilation System, version 6.10.4

在6.10.4上也无法重现。当我运行代码时,:t显示一般类型而不是默认类型(即我得到Num t => tFractional t => t作为类型)。 - sepp2k
5
你是否在使用MacPorts?https://trac.macports.org/ticket/25265 - Wesley
感谢KennyTM和Andrey。我想你们是对的。我在一台安装了ghc 6.8.2的旧机器上尝试了一下,它可以正常工作。但是我现在使用的是macport上最新版本的ghc,所以看来这只是一个有缺陷的版本。让我看看能否更新它。 - highBandWidth
@Wesley,是的!MacPorts必须要更新它! - highBandWidth
4个回答

6

是的,而且MacPorts真的很糟糕。我尝试远程安装Haskell-Platform MacPorts,但失败了,还生成了一个日志报告,现在我无法再访问我的远程机器了。 - highBandWidth
很抱歉我表达不够清晰;我的意思是你可能想要安装上面链接提供的二进制文件,而不是通过MacPorts安装。我认为MacPorts的haskell-platform只会再次包含GHC 6.10.4。 - Wesley

2

你需要明白的最重要的事情是,在Haskell中不应该出现分段错误。它的类型系统确保在运行时不会发生任何类似于“出错”的情况。如果你看到一个分段错误,那么要么是你的Haskell编译器有bug,要么是你正在使用Haskell FFI与C代码进行交互,而你的C代码出了问题。然而,在纯Haskell代码中,你永远不应该看到这种情况。


1

2011年3月:这个问题已经在Haskell平台的GHC 7版本中得到了解决,32位和64位Mac本地端口都处于良好状态。


0

在6.12.3版本上对我有效。可能是该版本中的一个错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接