
Hi librarians, I'd like to propose a an extension to Cabal's dependency description syntax. Cabal currently supports version range descriptions using the unary operators >, >=, <, <=, ==, and binary operators && and ||. This can lead to rather awkward descriptions of common version ranges, for example, base >= 1 && < 2 and could lead to subtle errors like base > 1 && < 2 or base >= 1 && <= 2 I therefore propose two extensions. Both are just syntactic sugar. (1) Wildcards: 1.* ~~> >= 1 && < 2 in general m.n.o.* ~~> >= m.n.o && < m.n.(o+1) Note, that the translation is not ">= 1.0 && < 2", because that would exclude version "1", as [1] < [1,0] == True. (2) Ranges: 1 - 2.1 ~~> >= 1 && <= 2.1 in general m - n ~~> >= m && <= n If the upper limit is supposed to be exclusive, this can be combined with (1): 1 - 2.0.* ~~> >= 1 && < 2.1 A possible alternatve syntax (subsuming both (1) and (2)) could be: [1, 2.1] ~~> >= 1 && <= 2.1 [1, 2.1) ~~> >= 1 && < 2.1 Although this syntax is closer to mathematical notation, I prefer the former for it is more explicit and more similar to common conventions used in other languages/package systems (an less scary scary to non-math-aficiados). I'd like include this into Cabal-1.2 which is scheduled with the next ghc release, so it can fearlessly be used when getting packages ready for GC 6.8.1. Please comment/vote. Thanks, / Thomas