Description
As @Gabriel439 explained in #1096 (comment):
the main issue we're running into is that the dhall package is actually doing two separate things:
- Providing a native Haskell binding
- Providing the
dhall
executableIf we could split out the native Haskell binding into a smaller separate package (i.e.
dhall-core
ordhall-api
) and leave thedhall
package for the executable (and re-exporting the Haskell API for backwards compatibility) then I'd have fewer reservations about adding extra dependencies to thedhall
package. The reason why is that I'd like people using dhall as a native Haskell binding to have a smaller dependency footprint.For example, if they were separate packages then somebody using the executable-free package to configure their Haskell program wouldn't need to depend on
repline
,aeson
,aeson-pretty
,Diff
,dotgen
,cborg-json
, oransi-terminal
. Similarly, we could freely add dependencies likeyaml
to the executable package guilt-free.
I'll add that:
- I agree that this separation would be greatly beneficial for downstream packages, e.g. in
spago
we have issues on some OSs because therepline
package dynamically links to the nativelibterminfo
(I guess we could statically compile releases, but I'd say just not depending onrepline
would be an easier option) - Should we also split off
dhall-json-core
from its executable package?