[Haskell-cafe] Fun with Cabal on Windows! [Stream fusion for Hackage]

Andrew Coppin andrewcoppin at btinternet.com
Mon Nov 19 15:29:18 EST 2007

Don Stewart wrote:
> Just a quick announce: the stream fusion library for lists, 
> that Duncan Coutts, Roman Leshchinskiy and I worked on earlier this year
> is now available on Hackage as a standalone package:
>     http://hackage.haskell.org/cgi-bin/hackage-scripts/package/stream-fusion-0.1.1
> As described in the recent paper:
>     "Stream Fusion: From Lists to Streams to Nothing at All"
>     Duncan Coutts, Roman Leshchinskiy and Don Stewart. ICFP 2007
> This is a drop-in replacement for Data.List.

Well, I just tried to install this, and as per usual, Cabal has having 
none of it.

C:\fusion\> runhaskell Setup configure
Configuring stream-fusion-0.1.1...
Setup: ld is required but it could not be found.

Well, no, this is Windoze, we don't have ld here...

On the other hand... hold on, doesn't GHC use GCC and ld?

On closer inspection, it seems that there *is* an LD.EXE on my 
harddrive. Cabal is simply failing to find it. Great.

It turns out, the standard GHC installer automatically adds 
C:\ghc\ghc-6.8.1.\bin to the search path. This contains GHC.EXE (and 
other things), but LD.EXE and friends aren't in there. Those are found 
in C:\ghc\ghc-6.8.1\gcc-lib. If you temporarily add *that* to your path...

C:\fusion\> set PATH=%PATH%;C:\ghc\ghc-6.8.1\gcc-lib
C:\fusion\> runhaskell Setup configure
Configuring stream-fusion-0.1.1...

C:\fusion\> runhaskell Setup build
Preprocessing library stream-fusion-0.1.1...
Building stream-fusion-0.1.1...
[1 of 3] Compiling Data.Stream      ( Data/Stream.hs, 
dist\build/Data/Stream.o )

    Warning: Pattern match(es) are non-exhaustive
             In the definition of `next':
                 Patterns not matched: (_ :!: (Just (L _))) :!: S2
[2 of 3] Compiling Data.List.Stream ( Data/List/Stream.hs, 
dist\build/Data/List/Stream.o )
[3 of 3] Compiling Control.Monad.Stream ( Control/Monad/Stream.hs, 
dist\build/Control/Monad/Stream.o )
C:\ghc\ghc-6.8.1\bin\ar.exe: creating dist\build\libHSstream-fusion-0.1.1.a

C:\fusion\> runhaskell Cabal install
Installing: C:\Program Files\Haskell\stream-fusion-0.1.1\ghc-6.8.1
Registering stream-fusion-0.1.1...
Reading package info from "dist\\installed-pkg-config" ... done.
Saving old package config file... done.
Writing new package config file... done.

OH...MY...GOD... I just successfully installed my first *ever* Cabal 
package! o_O

[I haven't tried to compile anything using it yet. But ghc-pkg seems to 
report that it's all in there just fine...]

I'm posting this information just in case any other poor soul on Windows 
wants to try to install stuff with Cabal. It seems that if you simply 
install GHC, it installs Cabal too, and adds GHC to your searchpath, and 
yet Cabal won't find ld out of the box. (Surely that can't be correct?) 
However, just by temporarily altering the search path (you don't even 
have to do it permanently) you can fix it. At least, for this particular 
package it fixes it...

PS. Somebody suggested configure --with-ld=PATH. This didn't work at all...

More information about the Haskell-Cafe mailing list