[Hackage] #382: 'cabal ghci' mode

Hackage trac at galois.com
Wed May 27 20:06:47 EDT 2009


#382: 'cabal ghci' mode
---------------------------------+------------------------------------------
  Reporter:  guest               |        Owner:        
      Type:  enhancement         |       Status:  new   
  Priority:  normal              |    Milestone:        
 Component:  cabal-install tool  |      Version:        
  Severity:  major               |   Resolution:        
  Keywords:                      |   Difficulty:  normal
Ghcversion:  6.8.2               |     Platform:        
---------------------------------+------------------------------------------
Changes (by batterseapower):

 * cc: batterseapower+Cabal382 at hotmail.com (added)

Comment:

 I'm about to attach a patch I slapped together that implements this
 functionality. However, I just talked to Duncan and he says:

 {{{
 dcoutts: BSP_: btw, if possible it'd be nice to export appropriate util
 functions from the GHC module and actually implement the feature in the
 cabal program (cabal-install package)
 [23:36] dcoutts: BSP_: eg we should be able to reuse a function for
 constructing ghc command lines
 [23:36] BSP_: it wasn't clear to me what the division of responsibility
 between cabal and cabal-install was
 [23:36] dcoutts: BSP_: here's how I see it now...
 [23:36] dcoutts: the program is for the user interface, it's a tool for
 devs
 [23:37] rfh_ left the chat room.
 [23:37] dcoutts: the lib is there to provide an implementation of the
 Cabal build system interface, which is currently specified as a command
 line interface
 [23:37] thetallguy1 left the chat room. (Read error: 104 (Connection reset
 by peer))
 [23:38] BSP_: ok.. but the line is definitely blurred by the presence of
 stuff like CommandUI in the Cabal library itself
 [23:38] cognominal left the chat room. (Read error: 113 (No route to
 host))
 [23:38] dcoutts: the lib has to implement a minimal cli so that package
 build scripts can call configure, build etc
 [23:39] dcoutts: BSP_: the crucial test I think is, does the rpm build
 script need it
 [23:40] dcoutts: I mean consider a random source rpm that has scripts for
 doing the build
 [23:40] BSP_: OK
 [23:40] dcoutts: it needs to configure, build, haddock, install
 [23:40] dcoutts: it's a machine api
 [23:40] dcoutts: where as cabal ghci blah is definitely aimed at end
 users, humans
 [23:41] BSP_: right
 [23:41] BSP_: btw i've called it "cabal interactive" instead, since
 theoretically you could implement the same thing for other compilers..
 [23:42] dcoutts: BSP_: good, I do have qualms about it being too ghc
 specific
 [23:42] dcoutts: BSP_: and if people complain about the length of the
 command then we can remind them that we do provide command line
 completion!
 [23:42] BSP_:
 [23:43] dcoutts: currently only for bash, but others would be easy, the
 feature is built into cabal itself
 [23:44] thetallguy1 joined the chat room.
 [23:53] dcoutts: BSP_: if you're working on that area perhaps I can
 persuade you to do a little refactoring of the GHC module, particularly
 the way ghc command lines are constructed
 [23:54] BSP_: dcoutts: there is a lot of redundancy - but perhaps I should
 wait for your patches before changing it any further
 [23:54] dcoutts: Saizan and I started on an approach with a big GhcOptions
 record and a function renderGhcOptions :: GhcOptions -> [String]
 [23:55] dcoutts: the idea is that functions that generate or mess with
 options would use the nice structured GhcOptions values
 [23:55] dcoutts: I've got half an implementation of the idea I can send
 you
 [23:57] dcoutts: BSP_: pushing the changes now...
 [23:57] BSP_: dcoutts: cheers
 [00:00] dcoutts: BSP_: some early attempts here
 http://haskell.org/~duncan/cabal/GHC.hs
 [00:00] dcoutts: diff it vs the current ./Distribution/Simple/GHC.hs
 [00:00] pumpkin: oh wow, it's BSP on IRC!
 [00:01] dcoutts: BSP_: it's the commented out bit about GhcOptions
 [00:01] dcoutts: BSP_: so we'd make GhcOptions an instance of Monoid and
 functions like packageHsGhcOptions :: BuildInfo -> LocalBuildInfo ->
 GhcOptions
 [00:01] BSP_: pumpkin: hey there  i think i recognise your name from
 github..
 [00:02] pumpkin: yup! 'tis me
 [00:02] BSP_: dcoutts: right, i'll take a look - no promises though
 [00:02] dcoutts: BSP_: sure
 [00:02] dcoutts: BSP_: ideally it'd make it easy for you to do the ghci
 bits in an external module, in cabal-install
 [00:03] dcoutts: BSP_: ah, of course we'll have to branch cabal-install
 and have the new head branch use the head version of the Cabal library
 [00:04] dcoutts: the current stable cabal-install uses the released stable
 Cabal version
 [00:06] BSP_: ok
 }}}

 So in summary:

  * The GHC module needs a serious refactoring, perhaps using a GhcOptions
 monoid
  * The patch should be for cabal-install, not cabal
  * The second thing kind of depends on the first, so it makes sense to do
 these together

 I'll make these changes to the patch if I find the time, but if not at
 least the incomplete patch is here with the ticket.

-- 
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/382#comment:9>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects


More information about the cabal-devel mailing list