Breakage with ghc-6.10

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Fri Oct 10 12:08:14 EDT 2008


This is a quick summary of the results of building most of hackage using
three combinations of ghc and Cabal.

I reported the breakage due to Cabal-1.6 previously. This is a brief
look at breakage introduced with ghc-6.10 and the associated library
changes.

I have build summary logs and individual package build logs. I will post
those later. Anyway, here's the summary of the summary:

ghc-6.8.2 & Cabal-1.4.0.2

      1 UnpackFailed
      3 InstallFailed
     20 ConfigureFailed
     27 DependencyFailed
     87 BuildFailed
    547 InstallOk

ghc-6.8.2 & Cabal-1.5.6

      1 UnpackFailed
      3 InstallFailed
     26 ConfigureFailed
     27 DependencyFailed
     87 BuildFailed
    541 InstallOk

ghc-6.10.0 (5th Oct version) & Cabal-1.6.0.0

      1 InstallFailed
     21 ConfigureFailed
    121 DependencyFailed
    126 BuildFailed
    422 InstallOk


If we look at a breakdown of the builds that caused three or more
knock-on failures (ie the causes of the 121 DependencyFailed above):

      3 hxt-8.1.0
      4 hsql-1.7
      4 hsx-0.4.4
      4 plugins-1.3
      4 TypeCompose-0.5
      6 arrows-0.4
     24 hslogger-1.0.5
     46 time-1.1.2.1

Hmm, time and hslogger are big ones there. Let's look at the individual
package build logs. First time:

Data/Time/Clock/CTimeval.hs:1:11:
    Warning: -ffi is deprecated: use -XForeignFunctionInterface or
pragma {-# LANGUAGE ForeignFunctionInterface#-} instead

<no location info>:
Failing due to -Werror.

NOOOOooooooooooooooooooo!!!!!!

This is the reason that hackage now rejects the use of -Werror in
released packages. It causes unnecessary breakage when new compilers add
new warnings.

Ok, lets look at hslogger:

src/System/Log/Logger.hs:333:20:
    Couldn't match expected type `Maybe Logger'
           against inferred type `IO Logger'
    In a stmt of a 'do' expression: result <- Map.lookup lname newlt

Ah ok, so that's the change in Map.lookup to return Maybe rather than in
any monad. So that's an easy source code fix:

result <- maybe (fail "Arrgh!") return (Map.lookup lname newlt)

Note of course this will also work with the previous implementation of
lookup.


Duncan



More information about the Glasgow-haskell-users mailing list