[Haskell-cafe] cabal, Setup.lhs example

wren ng thornton wren at freegeek.org
Thu Jul 22 22:33:52 EDT 2010


Magnus Therning wrote:
> On Thu, Jul 22, 2010 at 11:52, Ross Paterson <ross at soi.city.ac.uk> wrote:
>> On Thu, Jul 22, 2010 at 11:31:21AM +0100, Magnus Therning wrote:
>>> On Thu, Jul 22, 2010 at 10:59, Ross Paterson <ross at soi.city.ac.uk> wrote:
>>>> Magnus is building by directly running the Setup.hs himself, which ignores
>>>> the Build-Type.  To get cabal-install to use his Setup.hs, the Build-Type
>>>> must be set to Custom.
>>> Oh, why*2?
>>>
>>> Why is the header there if it's not used by Cabal, and why does cabal care?
>> The field allows cabal to avoid compiling the Setup.hs in this case.
>> It might also be used by other tools, e.g. one might only trust Simple
>> packages.  Not all fields are used by all tools, and several of them
>> do not affect the operation of the library (e.g. Home-page).
> 
> All right, so why would cabal want to avoid compiling the Setup.hs?
> 
> Of course this behaviour of cabal's means that I in the future will use *Custom*
> all the time, since I otherwise have to remember this surprising feature of a
> tool I never use.  Is there any reason *not* to do this?

The main reason I could think of to avoid compiling it is for 
performance reasons. I'm not sure how compelling that is, but...

As for why not to always use Custom, as mentioned there are cabal-aware 
tools out there besides cabal-install. For these other tools, there is a 
big difference between Simple and Custom. With Simple we (ideally) 
already know all the semantics of what Setup.hs does, and so we can wire 
that into our tools. With Custom we're forced into the position of doing 
Haskell source analysis since we now have to discover the semantics of 
an arbitrary Turing machine. That's a very high wall to climb if you're 
just wanting to write a simple tool for doing some kind of package analysis.

(I don't think the behavior is surprising since I interpret Simple to 
mean that the Setup.hs file is unused/optional. Though clearly YMMV)

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list