name: ghc-instances version: 0.1.0.1 synopsis: Easily import all instances contained in GHC distributed libraries description: This package simply has a number of modules which import all the modules from each package that is distributed with GHC. . There's also a module "Control.Instances.GHC_Packages", that imports all of the above modules, essentially importing every module distributed with GHC. . Why would you want to do this? . Lets say I've got a data type \"D a\". And a class \"C\". . Further, lets say I can define \"C (D a)\" if "a" is of class \"C1\". I can also \"C (D a)\" if "a" is of class \"C2\" . Lets try: . instance C1 a => C (D a) where ... . instance C2 a => C (D a) where ... . These are going to be overlapping. We can't do this. . But instead, we import "Control.Instances.GHC_Packages". And then we can use [reify](https://hackage.haskell.org/package/template-haskell-2.12.0.0/docs/Language-Haskell-TH.html#v:reify) from [Template Haskell](https://hackage.haskell.org/package/template-haskell-2.12.0.0) to bring every \"C1\" and \"C2\" instance in to scope that's defined anywhere in "base" or any GHC module. . We can then use Template Haskell to define all our instances. We can explicitly define what happens when both \"C1\" and \"C2\" instances are defined, perhaps prefering one over the other. . As we've got the full power of Haskell in Template Haskell, we can do these manipulations. . The package [static-closure](https://hackage.haskell.org/package/static-closure) is an example of using these instances to generate it's own instances for it's data type. . This package will need to be updated with each release of GHC but currently the cabal file and modules should contain appropriate pre-processor directives that this package should work from least from GHC 7.8 to GHC 8.2. homepage: https://github.com/clintonmead/ghc-instances#readme license: BSD3 license-file: LICENSE author: Clinton Mead maintainer: clintonmead@gmail.com copyright: Copyright: (c) 2017 Clinton Mead category: Web build-type: Simple cabal-version: >=1.10 library hs-source-dirs: src exposed-modules: Control.Instances.GHC_Packages, Control.Instances.Package.Array, Control.Instances.Package.Base, Control.Instances.Package.Binary, Control.Instances.Package.Bytestring, Control.Instances.Package.Cabal, Control.Instances.Package.Containers, Control.Instances.Package.Deepseq, Control.Instances.Package.Directory, Control.Instances.Package.Filepath, Control.Instances.Package.Ghc, Control.Instances.Package.Ghc_compact, Control.Instances.Package.Ghc_boot, Control.Instances.Package.Ghc_prim, Control.Instances.Package.Hoopl, Control.Instances.Package.Hpc, Control.Instances.Package.Integer_gmp, Control.Instances.Package.Process, Control.Instances.Package.Template_haskell, Control.Instances.Package.Time, Control.Instances.Package.Unix, Control.Instances.Package.Win32 build-depends: array, base < 4.11, binary, bytestring, Cabal, containers, deepseq, directory, filepath, ghc, ghc-prim, hoopl, hpc, integer-gmp, process, template-haskell, time if (os(windows)) build-depends: Win32 else build-depends: unix if (impl(ghc >= 8.2)) build-depends: ghc-compact if (impl(ghc >= 8)) build-depends: ghc-boot if (impl(ghc < 7.10)) build-depends: haskell98, haskell2010, old-locale, old-time ghc-options: -Wall -fno-warn-deprecations default-language: Haskell2010 source-repository head type: git location: https://github.com/clintonmead/ghc-instances