Haskell GHC在编译时崩溃
怎么了?我认为这与一个已知的bug有关。参见ghc手册第14.2节: 我将在这里复制相关部分: GHC的内联可以通过数据类型编码递归的标准方式说服其不终止: 除了这个人为的程序之外,我们从来没有发现另一类程序会使GHC产生分歧,解决这个问题会给每个编译带来额外的开销。因此,这个错误仍然没有得到修复。这里面有更多的背景Haskell GHC在编译时崩溃,haskell,ghc,Haskell,Ghc,怎么了?我认为这与一个已知的bug有关。参见ghc手册第14.2节: 我将在这里复制相关部分: GHC的内联可以通过数据类型编码递归的标准方式说服其不终止: 除了这个人为的程序之外,我们从来没有发现另一类程序会使GHC产生分歧,解决这个问题会给每个编译带来额外的开销。因此,这个错误仍然没有得到修复。这里面有更多的背景 换句话说,当您在负位置(即函数的参数)使用递归时,会出现此错误。从手册上看,他们似乎无意解决这个问题。正如前面提到的,当GHC的内联程序使用递归类型的参数时,问题就出现了。这可以
换句话说,当您在负位置(即函数的参数)使用递归时,会出现此错误。从手册上看,他们似乎无意解决这个问题。正如前面提到的,当GHC的内联程序使用递归类型的参数时,问题就出现了。这可以通过
NOINLINE
pragma解决。就你而言:
data U = MkU (U -> Bool)
russel :: U -> Bool
russel u@(MkU p) = not $ p u
x :: Bool
x = russel (MkU russel)
{-#NOINLINE(我可以用Ubuntu(针对x86_64-unknown-linux的GHC 7.6.3版)重现这一点)。我想你没有理由不报告它。我会报告它,但因为这是你的错误,我将把积分留给你。然而,这可能只是增加-fsimpl tick factor
的情况。如果用打印“foo”替换main中的所有内容,错误仍然会发生
并删除阶乘
。使用-fsimpl tick factor=25000
(默认值的250倍!)错误仍然会发生。不仅如此,还会对我造成打击。看起来像是对某些构造的无限迭代展开。您从何处获得该代码(这是您自己的吗?)@UliKöhler这是我自己的代码,在GHCi中运行良好。这确实很奇怪。据我所知,GHC中的相关优化器代码与GHCi中的代码相同。您链接到了6.12手册;,尽管它所在的部分现在编号为14.2。(另外,)
ghc: panic! (the 'impossible' happened)
(GHC version 7.6.3 for x86_64-apple-darwin):
Simplifier ticks exhausted
When trying UnfoldingDone a_sMx{v} [lid]
To increase the limit, use -fsimpl-tick-factor=N (default 100)
If you need to do this, let GHC HQ know, and what factor you needed
To see detailed counts use -ddump-simpl-stats
Total ticks: 7121
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
data U = MkU (U -> Bool)
russel :: U -> Bool
russel u@(MkU p) = not $ p u
x :: Bool
x = russel (MkU russel)
{-# NOINLINE (<|<) #-}