[Haskell-community] [Haskell-cafe] technical thoughts on stack

Patrick Pelletier code at funwithsoftware.org
Thu Sep 15 06:06:29 UTC 2016


On 9/14/16 7:46 PM, Harendra Kumar wrote:
> That's good news. I think the community will benefit from a healthy 
> competition among the tools. It is good to have choices in terms of 
> the front end but I would rather prefer a unified specification of 
> configuration. Currently with a stack workflow one has to deal with 
> two config files i.e. stack.yaml and project.cabal. There is no reason 
> why the stack and cabal configs cannot be unified.

To me, the stack.yaml and project.cabal file serve different purposes.  
The project.cabal specifies how to build a single package.  Even if you 
want to (try to) build that library in a very different build 
environment, everything in the project.cabal is still meaningful: source 
files, dependencies, license, how to run tests and benchmarks, etc.

The stack.yaml is about an entire build environment.  It is about things 
that have to (of necessity) be the same for all the packages that go 
into an executable: compiler version, snapshot, etc.

In other words, a single build environment can build many packages, and 
a single package can be built in many different environments. For 
example, in my directory structure for developing 
normalization-insensitive, I have three stack.yaml files:

stack-7.8.yaml
stack-7.10.yaml
stack-8.0.yaml

and I have three cabal files:

unicode-transforms/unicode-transforms.cabal
normalization-insensitive/normalization-insensitive.cabal
photos/photos.cabal

Each stack.yaml builds all three cabal projects.  And each cabal project 
can be built by any of the three stack.yaml files.  So, I see them as 
expressing very different concepts.

> Another point that I want to make is that I have found the cabal 
> config files hard to deal with. There are a number of annoying 
> problems with it and it lacks in reuse. That is the reason for tools 
> like hpack (https://github.com/sol/hpack) to be built to overcome 
> those problems. I think the problems that hpack solves should be 
> natively solved by cabal.

Yes, it would be nice if cabal-the-library could learn from hpack and 
solve some of the problems like redundancy.  I just wouldn't want to see 
fragmentation of the Haskell ecosystem.  (In other words, I want to be 
able to easily use any Haskell library as a dependency, even if the 
tools I am using are different than the tools the package author used.)

> I guess these problems are long pending and cabal did not evolve fast 
> enough. That could be one of the reasons for wrappers on top of cabal 
> or competing tools like stack getting created.

Well, hpack is addressing issues with the file format used by 
cabal-the-library, while stack is addressing issues with 
cabal-install-the-program.

> Are there any thoughts going towards a better config specification? 
> While we are at it it maybe good to have an extensible config which 
> can provide optional tool specific extensions.

Yes, that would be very nice.

--Patrick



More information about the Haskell-community mailing list