packages feed

ghc-instances-0.1.0.1: ghc-instances.cabal

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