This repository contains a set of patches for particular packages from
Hackage that cannot be built out-of-the-box with epm
. To install a package, you have to run the following command:
epm install <package-name>
epm
will take care of downloading the tar file, optionally patching it, and installing it.
Table of Contents
We have categorized the packages from Hackage below in relation to epm
support. If a package from Hackage has not been listed here, it means no one has tried to build it and categorize it.
If you would like to have a given package/version made compatible with epm
, you can:
These packages are supported by epm
.
- abstract-deque-0.3
- abstract-par-0.3.3
- Adaptive-0.1
- adjunctions-4.3
- agum-2.6
- ansi-terminal-0.6.2.3
- NOTE: Windows support disabled.
- ansi-wl-pprint-0.6.7.3
- array-0.5.1.1
- array-utils-0.3
- async-2.1.1
- attoparsec-0.13.1.0
- base-compat-0.9.1
- base-orphans-0.5.4
- base-prelude-1.0.1.1
- base16-bytestring-0.1.1.6
- base64-bytestring-1.0.0.1
- basic-lens-0.0.0
- basic-prelude-0.6.1
- binary-conduit-1.2.4.1
- binary-search-1.0.0.3
- bindings-DSL-1.0.23
- bifunctors-5.4.1
- bitarray-0.0.1.1
- Binpack-0.4.1
- blaze-builder-0.4.0.2
- blaze-html-0.8.1.3
- blaze-html-truncate-0.3.0.0
- blaze-markup-0.7.1.1
- bytestring-builder-0.10.8.1.0
- call-stack-0.1.0
- case-insensitive-1.2.0.7
- cassava-0.4.5.1
- cereal-0.5.4.0
- chunked-data-0.3.0
- conceit-0.4.0.0
- concurrent-machines-0.2.3.3
- comonad-5
- NOTE: The patch just changes the Build-Type. Should be restored once Cabal can be compiled with Eta.
- conduit-1.2.8
- constraints-0.8
- containers >= 0.5.8.1 && <= 0.5.9.1
- contravariant-1.4
- cookie-0.4.2.1
- data-default-0.7.1.1
- data-default-class-0.1.2.0
- data-default-instances-containers-0.0.1
- data-default-instances-dlist-0.0.1
- data-default-instances-old-locale-0.0.1
- deepseq-1.4.2.0
- directory-1.3.0.0
- directory-tree-0.12.1
- disjoint-sets-st-0.1
- distributive >= 0.5.0.2 && <= 0.5.1
- NOTE: The patch just changes the Build-Type. Should be restored once Cabal can be compiled with Eta.
- dlist-0.8.0.2
- dom-lt-0.1.3
- DecisionTree-0.0
- either-4.4.1.1
- errors-2.1.3
- exceptions-0.8.3
- fail-4.9.0.0
- fibonacci-0.2.0.1
- fingertree-0.1.1.0
- fingertree-psqueue-0.3
- fingertree-tf-0.1.0.0
- filepath >= 1.4.1.0 && <= 1.4.1.1
- fgl-5.5.3.0
- NOTE: Gives
Ignoring ANN annotation, because this is a stage-1 compiler or doesn't support GHCi
- NOTE: Gives
- fmlist-0.9
- free-4.12.4
- garsia-wachs-1.2
- generic-deriving-1.11.1
- GenericPretty-1.2.1
- gdiff-1.1
- gray-code-0.3.1
- ghc-boot-th-8.0.1
- Glob-0.7.14
- graph-matchings-0.1.0.0
- graph-wrapper-0.2.5.1
- groups-0.4.0.0
- hashable >= 1.2.4.0 && <= 1.2.5.0
- heap-1.0.3
- heaps-0.3.3
- hetero-map-0.21
- hex-0.1.2
- hgal-2.0.0.2
- HoleyMonoid-0.1.1
- hostname-1.0
- html-truncate-0.3.0.0
- http-types-0.9.1
- HUnit-1.5.0.0
- interval-1.20160821
- js-flot-0.8.3
- js-jquery-3.1.1
- kan-extensions-5.0.1
- lazy-io-0.1.0
- labeled-tree-1.0.0.0
- lens-4.15.1
- lens-family-1.2.1
- lens-family-core-1.2.1
- lca-0.3
- lifted-async-0.9.0
- lifted-base-0.2.3.8
- list-extras-0.4.1.4
- logict-0.6.0.2
- loop-0.3.0
- machines-0.6.1
- machines-binary-0.3.0.3
- machines-io-0.2.0.13
- map-syntax-0.2.0.1
- meldable-heap-2.0.3
- microlens-0.4.7.0
- microlens-mtl-0.1.10.0
- mime-types-0.1.0.7
- mmorph >= 1.0.6 && <= 1.0.9
- monad-par-0.3.4.8
- monad-par-extras-0.3.3
- monoid-absorbing-0.1.0.4
- monad-control-1.0.1.0
- MonadRandom-0.4.2.3
- monads-tf-0.1.0.3
- mono-traversable-1.0.1
- mtl-2.2.1
- mtl-compat-0.2.1.3
- multiset-0.3.3
- mwc-random-0.13.5.0
- nested-sequence-0.2
- nested-sets-0.0.1.1
- network-uri-2.6.1.0
- newtype-0.2
- newtype-generics-0.4.1
- old-locale-1.0.0.7
- old-time-1.1.0.3
- parallel-3.2.1.0
- parsec-3.1.11
- patch-combinators-0.2.2
- pipes >= 4.3.1 && <= 4.3.2
- pipes-4.3.1
- pipes-bytestring-2.1.4
- pipes-concurrency-2.0.7
- pipes-group-1.0.6
- pipes-parse-3.0.8
- pipes-safe-2.2.5
- pointed-5
- polyparse-1.12
- pqueue-1.3.1.1
- psqueues-0.2.2.3
- pqueue-1.3.1.1
- PSQueue-1.1
- prelude-extras-0.4.0.3
- pretty-1.1.3.4
- prettyclass-1.0.0.0
- primes-0.2.1.0
- primitive-0.6.2.0
- profunctors-5.2
- queue-0.1.2
- ReadArgs-1.2.3
- readable-0.3.1
- reflection-2.1.2
- template-haskell flag was disabled by default. Enable once TemplateHaskell works.
- regex-base-0.93.2
- relacion-0.1
- resourcet >= 1.1.8.1 && <= 1.1.9
- randproc-0.4
- safe-0.3.9
- scientific-0.3.4.9
- semigroups-0.18.2
- semigroupoids-5.1
- NOTE: The patch just changes the Build-Type. Should be restored once Cabal can be compiled with Eta.
- silently-1.2.5
- split-0.2.3.1
- stable-marriage-0.1.1.0
- StateVar-1.1.0.4
- stm-2.4.4.1
- stm-chans-3.0.0.4
- NOTE: The patch just changes the Build-Type. Should be restored once Cabal can be compiled with Eta.
- syb-0.6
- system-filepath-0.4.13.4
- tagged-0.8.5
- tagsoup-0.14
- template-haskell-2.11.0.0
- text-1.2.2.1
- time >= 1.6.0.1 <= 1.7
- time-locale-compat-0.1.1.3
- transformers-0.5.2.0
- transformers-base-0.4.4
- transformers-compat-0.5.1.4
- tree-fun-0.8.1.0
- type-level-sets-0.8.0.0
- unexceptionalio-0.3.0
- unification-fd-0.10.0.1
- union-find-0.2
- union-find-array-0.1.0.2
- unicode-transforms-0.2.0
- unordered-containers-0.2.7.1
- uri-bytestring-0.2.2.1
- uuid-types-1.0.3
- vault-0.3.0.6
- vector-0.11.0.0
- vector-algorithms-0.7.0.1
- vector-binary-instances-0.2.3.3
- vinyl-0.5.1.1
- void-0.7.1
- word8-0.1.2
- xhtml-3000.2.1
- xml-types-0.3.6
- xmlhtml-0.2.3.5
These packages are heavy on FFI dependencies and don't make sense in the context of the JVM, hence no effort will be made to port them.
- None for now
These packages have special meaning in the Eta compiler and hence are provided upon installation.
- base-4.8.2.0
- integer-0.5.1.0
- NOTE: Due to the drastic differences between the
Integer
implementations, the public API between the corresponding GHC package is slightly different.
- NOTE: Due to the drastic differences between the
- ghc-prim-0.4.0.0
- NOTE: Due to the introduction of new primitives for Eta, the public API between the corresponding GHC package is slightly different.
Suppose that you find a library you want to patch, say somepackage-0.1.2.3
.
If you have already forked this repository, the skip to step 3.
-
Fork this repository.
-
Clone the forked repository & update the
master
branch.
$ git clone http://github.org/your-name-here/eta-hackage
- Checkout the
master
branch and pull any changes.
$ git checkout master
$ git pull
- Create a new branch with the same name as the package.
$ git checkout -b somepackage
-
Download the
somepackage-0.1.2.3.tar.gz
tarball from Hackage. -
Initialize a git repository and make an initial commit.
$ git init
$ git add .
$ git commit -m "First"
- Build the package.
$ epm build
-
Apply the desired changes and go back to step 3 as long as the build fails.
-
Once the build succeeds, make a commit.
$ git add .
$ git commit -m "Patched"
-
Create a patch.
$ git format-patch HEAD~ --stdout > somepackage-0.1.2.3.patch
-
If you have changed the
.cabal
file of the package in your patch , make a copy and rename it fromsomepackage.cabal
tosomepackage-0.1.2.3.cabal
. -
Copy the patch file and the cabal file (if changed) to the
patches
directory in your local clone of your fork of theeta-hackage
repository. -
In your
eta-hackage
repository,$ git commit -m "Patched somepackage-0.1.2.3" $ git push origin
Also add the name of the package to the
packages.json
file and update this README.md with the package name (in alphabetical order). -
Submit a pull request to this repository for review.
When you want to see how a library (say somepackage-0.1.2.3
) looks with the patches applied:
-
Download the source distribution of that package from Hacakage and extract it.
-
Initialize a git repository in it and apply the patch (after copying it to the directory).
$ git init
$ git apply somepackage-0.1.2.3.patch
You may wish to modify an existing patch. If so, apply the steps above after Step 2 in Patching a Library/Patching.