[Haskell-community] [Haskell-cafe] Standard package file format
Patrick Pelletier
ppelleti at funwithsoftware.org
Fri Sep 16 10:13:29 UTC 2016
On 9/16/16 2:36 AM, Paolo Giarrusso wrote:
> (Resending from right address)
>
> We're talking about *three* options:
> 1. syntax for pure Haskell values, which I'll call HSON (Haskell
> jSON). That's just an alternative to YAML/TOML/... That would need
> extensions to allow omitting optional fields entirely.
> 2. a pure Haskell embedded domain-specific language (EDSL) that simply
> generates cabal description records (GenericPackageDescription
> values). That would allow abstraction over some patterns but not much
> more. But that alone is already an argument for EDSLs—the one Harendra
> already presented.
> 3. a Haskell embedded domain-specific language (EDSL) designed for an
> extensible build tool, like Clojure's (apparently), SBT for Scala or
> many others. That would potentially be a rabbit hole leading to a
> rather *different* tool—with a different package format to boot. That
> can't work as long as all libraries have to be built using the same
> tool. But stack and cabal are really about how to manage package
> databases/GHC/external environments, while extensible build tools are
> about (a more powerful form) of writing custom setup scripts. I
> suspect some extensions might be easier if more of the actual building
> was done by the setup script, but I'm not sure.
Options 2 and 3 both require running Haskell code at build time. This
presents problems in a couple of cases:
Cross compilation: There are already a couple of cases where we need to
run Haskell code at build time: Template Haskell, and custom Setup.hs.
Neither of these are supported in cross-compilation. (The former is a
ghc issue, while the latter is a Cabal issue.) So I'm assuming that the
new Haskell-based EDSL wouldn't work in cross-compilation, either. The
difference is that Template Haskell and custom Setup.hs are only used by
some packages. But if all packages had to use the new EDSL, then
cross-compilation would essentially become impossible.
Platforms without ghci: Even when not cross-compiling, some platforms
don't support ghci. (This is usually the less popular platforms. Not
too long ago, it even included ARM.) ghci support is necessary for
Template Haskell, and I assume the EDSL would work the same way. So
then less popular platforms would be left out in the cold.
--Patrick
More information about the Haskell-community
mailing list