Haskell中的怪癖7.8.3

时间:2014-12-27 00:50:14

标签: haskell

我在普通文件中有2个函数,没有别的。

--This is FN1
helper :: Int -> Double -> Double
helper n x = (nu/d)
  where
    nu = x^n 
    d = product [1 .. n]

--This is FN2
filterOdd :: [a] -> [a] 
filterOdd ls = fi ls [1..]
  where
    fi [] _ = []
    fi (v:vs) (i:ix) = if even i
                        then v:(fi vs ix) 
                        else fi vs ix

我正在使用GHC 7.8.3

我知道FN1中存在类型错误。我知道这一点。 当注释并运行FN1时,GHCi不会抛出任何错误。 但是当FN1被取消注释并且运行GHCi显示FN1中的明显错误时,FN2也会出现2页长的错误。

我不明白这一点。 FN1和FN2之间没有明确的关系。 FN1中没有任何内容正在调用FN2,反之亦然。但是,当FN1被取消注释时,为什么GHCi会显示FN2的错误?

确切的错误足够长,我决定把它放在lpaste

有人可以告诉我,发生了什么事吗?很可能,我误解了一些事情。

1 个答案:

答案 0 :(得分:8)

这是GHC Trac门票#9323,其中给出了示例

module Foo where

broken :: [Int]
broken = ()

ambiguous :: a -> String
ambiguous _ = show 0

" thomie"在Simon Peyton Jones在7月离开this comment之后关闭了机票:

  

HEAD的一切都很好。 (我不知道有多少变化   在7.8和HEAD之间负责。)

     

我会添加回归测试。但我并不打算修复7.8。

     

西蒙

注意:GHC开发圈中一个特殊但现在根深蒂固的惯例是将官方git master分支称为HEAD