[Haskell-cafe] cabal, Setup.lhs example

Magnus Therning magnus at therning.org
Fri Jul 23 04:18:59 EDT 2010


On Fri, Jul 23, 2010 at 04:58, Mark Wotton <mwotton at gmail.com> wrote:
> On Fri, Jul 23, 2010 at 12:33 PM, wren ng thornton <wren at freegeek.org> wrote:
>> 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)
>
>
> Ah, this clears up one of my bugs.
>
> Perhaps cabal should print a warning if you have a Setup.hs file,
> _and_ try to use Simple? It'd at least give the hint that they're
> unhappy together.

I don't like that idea.  I don't use cabal, so I always need a Setup.hs
whether the Build-Type is Simple or Custom.

This suggestion would also force some tools that don't care about Build-Type
(they just use the Setup.hs irrespective of Build-Type) to start caring.

/M

-- 
Magnus Therning                        (OpenPGP: 0xAB4DFBA4)
magnus@therning.org          Jabber: magnus@therning.org
http://therning.org/magnus         identi.ca|twitter: magthe


More information about the Haskell-Cafe mailing list