base-orphans 0.4.2 → 0.4.3
raw patch · 19 files changed
+1570/−1548 lines, 19 filesdep ~basesetup-changedPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- CHANGES.markdown +52/−49
- LICENSE +20/−20
- README.markdown +69/−69
- Setup.hs +2/−2
- base-orphans.cabal +71/−68
- src/Data/Orphans.hs +865/−955
- src/Data/Orphans/Prelude.hs +94/−0
- test/Control/Applicative/OrphansSpec.hs +40/−40
- test/Control/Exception/OrphansSpec.hs +17/−17
- test/Data/Bits/OrphansSpec.hs +25/−25
- test/Data/Foldable/OrphansSpec.hs +38/−38
- test/Data/Monoid/OrphansSpec.hs +17/−17
- test/Data/Traversable/OrphansSpec.hs +27/−27
- test/Data/Version/OrphansSpec.hs +26/−26
- test/Foreign/Storable/OrphansSpec.hs +24/−24
- test/GHC/Fingerprint/OrphansSpec.hs +29/−29
- test/Spec.hs +1/−1
- test/System/Posix/Types/IntWord.hs +4/−0
- test/System/Posix/Types/OrphansSpec.hs +149/−141
CHANGES.markdown view
@@ -1,49 +1,52 @@-## Changes in 0.4.2- - `Functor` instances for `Handler`- - `Functor`. `Applicative`, `Alternative`, and `MonadPlus` instances for- `ArrowMonad`- - Expose `Read` and `Show` instances for `Down` on GHCs before 7.8- - `Bits`, `Bounded`, and `Integral` instances for `CDev`--## Changes in 0.4.1- - Fixed imports on GHC < 7.8 on Windows--## Changes in 0.4.0- - Removed all `Generic` and `Generic1` instances. These have been moved to the- `generic-deriving` library.--## Changes in 0.3.3- - `Typeable` instances for `(~)`, `Any`, `Constraint`, `CSigset`, `Handler`,- `Opaque`, `SPEC`, and every promotable data constructor in `base`--## Changes in 0.3.2- - `Storable (Complex a)` instance no longer requires a `RealFloat a`- constraint if using `base-4.4` or later--## Changes in 0.3.1- - `Functor`, `Applicative`, and `Monad` instances for `First` and `Last`--## Changes in 0.3.0- - `Show` instance for `Fingerprint`- - `Data.Orphans` is now `Trustworthy`- - Backported the `Generic` and `Generic1` instances available in `base-4.7.0.0`- to GHC 7.2, 7.4, and 7.6, namely- * `Const`, `WrappedMonad`, and `ZipList` from `Control.Applicative`- * `WrappedArrow` from `Control.Category`- * `All`, `Any`, `Dual`, `Endo`, `First`, `Last`, `Product`, and `Sum` from- `Data.Monoid`- * `U1`, `Par1`, `Rec1`, `K1`, `M1`, `(:+:)`, `(:*:)`, `(:.:)`, `Arity`,- `Associativity`, and `Fixity` from `GHC.Generics`--## Changes in 0.2.0- - Drop GHC 6.12 (and `base-4.2.0.0`) compatibility- - Fix Windows, GHCJS build- - `Read` instance for `Fixed`- - `Applicative` instances for strict and lazy `ST`- - `Typeable` instance for `SampleVar`- - `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec`- - `Typeable` instance for `KProxy`- - `Typeable` instances for more data types in `GHC.`-prefixed modules- - `Generic` instances for `Arity`, `Associativity`, and `Fixity` from- the `GHC.Generics` module- - Corrected the `Generic` instance for `(:*:)` to work around GHC bug #9830+## Changes in 0.4.3 + - Fix build on OSes where `HTYPE_DEV_T = Int32` (e.g., OS X) + +## Changes in 0.4.2 + - `Functor` instances for `Handler` + - `Functor`. `Applicative`, `Alternative`, and `MonadPlus` instances for + `ArrowMonad` + - Expose `Read` and `Show` instances for `Down` on GHCs before 7.8 + - `Bits`, `Bounded`, and `Integral` instances for `CDev` + +## Changes in 0.4.1 + - Fixed imports on GHC < 7.8 on Windows + +## Changes in 0.4.0 + - Removed all `Generic` and `Generic1` instances. These have been moved to the + `generic-deriving` library. + +## Changes in 0.3.3 + - `Typeable` instances for `(~)`, `Any`, `Constraint`, `CSigset`, `Handler`, + `Opaque`, `SPEC`, and every promotable data constructor in `base` + +## Changes in 0.3.2 + - `Storable (Complex a)` instance no longer requires a `RealFloat a` + constraint if using `base-4.4` or later + +## Changes in 0.3.1 + - `Functor`, `Applicative`, and `Monad` instances for `First` and `Last` + +## Changes in 0.3.0 + - `Show` instance for `Fingerprint` + - `Data.Orphans` is now `Trustworthy` + - Backported the `Generic` and `Generic1` instances available in `base-4.7.0.0` + to GHC 7.2, 7.4, and 7.6, namely + * `Const`, `WrappedMonad`, and `ZipList` from `Control.Applicative` + * `WrappedArrow` from `Control.Category` + * `All`, `Any`, `Dual`, `Endo`, `First`, `Last`, `Product`, and `Sum` from + `Data.Monoid` + * `U1`, `Par1`, `Rec1`, `K1`, `M1`, `(:+:)`, `(:*:)`, `(:.:)`, `Arity`, + `Associativity`, and `Fixity` from `GHC.Generics` + +## Changes in 0.2.0 + - Drop GHC 6.12 (and `base-4.2.0.0`) compatibility + - Fix Windows, GHCJS build + - `Read` instance for `Fixed` + - `Applicative` instances for strict and lazy `ST` + - `Typeable` instance for `SampleVar` + - `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec` + - `Typeable` instance for `KProxy` + - `Typeable` instances for more data types in `GHC.`-prefixed modules + - `Generic` instances for `Arity`, `Associativity`, and `Fixity` from + the `GHC.Generics` module + - Corrected the `Generic` instance for `(:*:)` to work around GHC bug #9830
LICENSE view
@@ -1,20 +1,20 @@-Copyright (c) 2015 Simon Hengel <sol@typeful.net>, João Cristóvão <jmacristovao@gmail.com>, Ryan Scott <ryan.gl.scott@ku.edu>--Permission is hereby granted, free of charge, to any person obtaining-a copy of this software and associated documentation files (the-"Software"), to deal in the Software without restriction, including-without limitation the rights to use, copy, modify, merge, publish,-distribute, sublicense, and/or sell copies of the Software, and to-permit persons to whom the Software is furnished to do so, subject to-the following conditions:--The above copyright notice and this permission notice shall be included-in all copies or substantial portions of the Software.--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+Copyright (c) 2015 Simon Hengel <sol@typeful.net>, João Cristóvão <jmacristovao@gmail.com>, Ryan Scott <ryan.gl.scott@ku.edu> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
README.markdown view
@@ -1,69 +1,69 @@-# `base-orphans` [](http://hackage.haskell.org/package/base-orphans) [](https://travis-ci.org/haskell-compat/base-orphans)--## Scope--`base-orphans` defines orphan instances that mimic instances available in later-versions of `base` to a wider (older) range of compilers. `base-orphans` does-not export anything except the orphan instances themselves and complements-[base-compat](http://hackage.haskell.org/package/base-compat).--Note that `base-orphans` doesn't cover every possible instance. See the-[What is not covered](#what-is-not-covered) section for exceptions.--## Usage--To use `base-orphans`, simply `import Data.Orphans ()`.--## What is covered-- * Added `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec`- * Added `Bits`, `Bounded`, and `Integral` instances for `CDev`- * Added `Eq` and `Ord` instances for `Control.Exception.ErrorCall`- * Added `Eq`, `Ord`, `Read`, and `Show` instances for data types in `GHC.Generics`- * Added `Functor`, `Applicative`, `Alternative`, and `MonadPlus` instances for `ArrowMonad`- * Added `Functor`, `Applicative`, and `Monad` instances for `First` and `Last`- * Added `Monoid`, `Eq`, `Ord`, `Read`, and `Show` instances for `Const`- * Added `Read` and `Show` instances for `Down`- * Added `Eq`, `Ord`, `Read`, and `Show` instances for `ZipList`- * Added `Monad` instance for `WrappedMonad`- * Added `Data` and `IsList` instances for `Version`- * `Applicative` instance for strict and lazy `ST`- * `Bits` instance for `Bool`- * `Foldable` instance for `Either`, `(,)` and `Const`- * `Functor` instance for `Handler`, `ArgOrder`, `OptDescr`, and `ArgDescr`- * `Num` instance for `Sum` and `Product`- * `Read` instance for `Fixed`- * `Show` instance for `Fingerprint`- * `Storable` instance for `Complex` and `Ratio`- * `Traversable` instance for `Either`, `(,)` and `Const`- * `Typeable` instance for most data types, typeclasses, and promoted data constructors (when possible)--## What is not covered-`base-orphans` does not define the following instances:--* `Generic` or `Generic1` instances. These can be found in the- [`Generics.Deriving.Instances`](https://hackage.haskell.org/package/generic-deriving-1.8.0/docs/Generics-Deriving-Instances.html)- module of the [`generic-deriving`](https://hackage.haskell.org/package/generic-deriving)- library.--## Supported versions of GHC/`base`-- * `ghc-7.10.2` / `base-4.8.1.0`- * `ghc-7.10.1` / `base-4.8.0.0`- * `ghc-7.8.4` / `base-4.7.0.2`- * `ghc-7.8.3` / `base-4.7.0.1`- * `ghc-7.8.2` / `base-4.7.0.0`- * `ghc-7.8.1` / `base-4.7.0.0`- * `ghc-7.6.3` / `base-4.6.0.1`- * `ghc-7.6.2` / `base-4.6.0.1`- * `ghc-7.6.1` / `base-4.6.0.0`- * `ghc-7.4.2` / `base-4.5.1.0`- * `ghc-7.4.1` / `base-4.5.0.0`- * `ghc-7.2.2` / `base-4.4.1.0`- * `ghc-7.2.1` / `base-4.4.0.0`- * `ghc-7.0.4` / `base-4.3.1.0`- * `ghc-7.0.3` / `base-4.3.1.0`- * `ghc-7.0.2` / `base-4.3.1.0`- * `ghc-7.0.1` / `base-4.3.0.0`--Patches are welcome; add tests for new code!+# `base-orphans` [](http://hackage.haskell.org/package/base-orphans) [](https://travis-ci.org/haskell-compat/base-orphans) + +## Scope + +`base-orphans` defines orphan instances that mimic instances available in later +versions of `base` to a wider (older) range of compilers. `base-orphans` does +not export anything except the orphan instances themselves and complements +[base-compat](http://hackage.haskell.org/package/base-compat). + +Note that `base-orphans` doesn't cover every possible instance. See the +[What is not covered](#what-is-not-covered) section for exceptions. + +## Usage + +To use `base-orphans`, simply `import Data.Orphans ()`. + +## What is covered + + * Added `Applicative` and `Alternative` instances for `ReadP` and `ReadPrec` + * Added `Bits`, `Bounded`, and `Integral` instances for `CDev` + * Added `Eq` and `Ord` instances for `Control.Exception.ErrorCall` + * Added `Eq`, `Ord`, `Read`, and `Show` instances for data types in `GHC.Generics` + * Added `Functor`, `Applicative`, `Alternative`, and `MonadPlus` instances for `ArrowMonad` + * Added `Functor`, `Applicative`, and `Monad` instances for `First` and `Last` + * Added `Monoid`, `Eq`, `Ord`, `Read`, and `Show` instances for `Const` + * Added `Read` and `Show` instances for `Down` + * Added `Eq`, `Ord`, `Read`, and `Show` instances for `ZipList` + * Added `Monad` instance for `WrappedMonad` + * Added `Data` and `IsList` instances for `Version` + * `Applicative` instance for strict and lazy `ST` + * `Bits` instance for `Bool` + * `Foldable` instance for `Either`, `(,)` and `Const` + * `Functor` instance for `Handler`, `ArgOrder`, `OptDescr`, and `ArgDescr` + * `Num` instance for `Sum` and `Product` + * `Read` instance for `Fixed` + * `Show` instance for `Fingerprint` + * `Storable` instance for `Complex` and `Ratio` + * `Traversable` instance for `Either`, `(,)` and `Const` + * `Typeable` instance for most data types, typeclasses, and promoted data constructors (when possible) + +## What is not covered +`base-orphans` does not define the following instances: + +* `Generic` or `Generic1` instances. These can be found in the + [`Generics.Deriving.Instances`](https://hackage.haskell.org/package/generic-deriving-1.8.0/docs/Generics-Deriving-Instances.html) + module of the [`generic-deriving`](https://hackage.haskell.org/package/generic-deriving) + library. + +## Supported versions of GHC/`base` + + * `ghc-7.10.2` / `base-4.8.1.0` + * `ghc-7.10.1` / `base-4.8.0.0` + * `ghc-7.8.4` / `base-4.7.0.2` + * `ghc-7.8.3` / `base-4.7.0.1` + * `ghc-7.8.2` / `base-4.7.0.0` + * `ghc-7.8.1` / `base-4.7.0.0` + * `ghc-7.6.3` / `base-4.6.0.1` + * `ghc-7.6.2` / `base-4.6.0.1` + * `ghc-7.6.1` / `base-4.6.0.0` + * `ghc-7.4.2` / `base-4.5.1.0` + * `ghc-7.4.1` / `base-4.5.0.0` + * `ghc-7.2.2` / `base-4.4.1.0` + * `ghc-7.2.1` / `base-4.4.0.0` + * `ghc-7.0.4` / `base-4.3.1.0` + * `ghc-7.0.3` / `base-4.3.1.0` + * `ghc-7.0.2` / `base-4.3.1.0` + * `ghc-7.0.1` / `base-4.3.0.0` + +Patches are welcome; add tests for new code!
Setup.hs view
@@ -1,2 +1,2 @@-import Distribution.Simple-main = defaultMain+import Distribution.Simple +main = defaultMain
base-orphans.cabal view
@@ -1,68 +1,71 @@--- This file has been generated from package.yaml by hpack version 0.5.4.------ see: https://github.com/sol/hpack--name: base-orphans-version: 0.4.2-synopsis: Backwards-compatible orphan instances for base-homepage: https://github.com/haskell-compat/base-orphans#readme-bug-reports: https://github.com/haskell-compat/base-orphans/issues-license: MIT-license-file: LICENSE-author: Simon Hengel <sol@typeful.net>,- João Cristóvão <jmacristovao@gmail.com>,- Ryan Scott <ryan.gl.scott@ku.edu>-maintainer: Simon Hengel <sol@typeful.net>,- João Cristóvão <jmacristovao@gmail.com>,- Ryan Scott <ryan.gl.scott@ku.edu>-copyright: (c) 2012-2015 Simon Hengel,- (c) 2014 João Cristóvão,- (c) 2015 Ryan Scott-category: Compatibility-build-type: Simple-cabal-version: >= 1.10-description: @base-orphans@ defines orphan instances that mimic instances available in later versions of @base@ to a wider (older) range of compilers. @base-orphans@ does not export anything except the orphan instances themselves and complements @<http://hackage.haskell.org/package/base-compat base-compat>@.- See the README for what instances are covered: <https://github.com/haskell-compat/base-orphans#readme>. See also the <https://github.com/haskell-compat/base-orphans#what-is-not-covered what is not covered> section.--extra-source-files:- CHANGES.markdown- README.markdown--source-repository head- type: git- location: https://github.com/haskell-compat/base-orphans--library- hs-source-dirs:- src- ghc-options: -Wall- build-depends:- base >= 4.3 && < 5- , ghc-prim- exposed-modules:- Data.Orphans- default-language: Haskell2010--test-suite spec- type: exitcode-stdio-1.0- main-is: Spec.hs- hs-source-dirs:- test- ghc-options: -Wall- build-depends:- base >= 4.3 && < 5- , base-orphans- , hspec == 2.*- , QuickCheck- other-modules:- Control.Applicative.OrphansSpec- Control.Exception.OrphansSpec- Data.Bits.OrphansSpec- Data.Foldable.OrphansSpec- Data.Monoid.OrphansSpec- Data.Traversable.OrphansSpec- Data.Version.OrphansSpec- Foreign.Storable.OrphansSpec- GHC.Fingerprint.OrphansSpec- System.Posix.Types.OrphansSpec- default-language: Haskell2010+-- This file has been generated from package.yaml by hpack version 0.5.4. +-- +-- see: https://github.com/sol/hpack + +name: base-orphans +version: 0.4.3 +synopsis: Backwards-compatible orphan instances for base +homepage: https://github.com/haskell-compat/base-orphans#readme +bug-reports: https://github.com/haskell-compat/base-orphans/issues +license: MIT +license-file: LICENSE +author: Simon Hengel <sol@typeful.net>, + João Cristóvão <jmacristovao@gmail.com>, + Ryan Scott <ryan.gl.scott@ku.edu> +maintainer: Simon Hengel <sol@typeful.net>, + João Cristóvão <jmacristovao@gmail.com>, + Ryan Scott <ryan.gl.scott@ku.edu> +copyright: (c) 2012-2015 Simon Hengel, + (c) 2014 João Cristóvão, + (c) 2015 Ryan Scott +category: Compatibility +build-type: Simple +cabal-version: >= 1.10 +description: @base-orphans@ defines orphan instances that mimic instances available in later versions of @base@ to a wider (older) range of compilers. @base-orphans@ does not export anything except the orphan instances themselves and complements @<http://hackage.haskell.org/package/base-compat base-compat>@. + See the README for what instances are covered: <https://github.com/haskell-compat/base-orphans#readme>. See also the <https://github.com/haskell-compat/base-orphans#what-is-not-covered what is not covered> section. + +extra-source-files: + CHANGES.markdown + README.markdown + +source-repository head + type: git + location: https://github.com/haskell-compat/base-orphans + +library + hs-source-dirs: + src + ghc-options: -Wall + build-depends: + base >= 4.3 && < 5 + , ghc-prim + exposed-modules: + Data.Orphans + other-modules: + Data.Orphans.Prelude + default-language: Haskell2010 + +test-suite spec + type: exitcode-stdio-1.0 + main-is: Spec.hs + hs-source-dirs: + test + ghc-options: -Wall + build-depends: + base >= 4.3 && < 5 + , base-orphans + , hspec == 2.* + , QuickCheck + other-modules: + Control.Applicative.OrphansSpec + Control.Exception.OrphansSpec + Data.Bits.OrphansSpec + Data.Foldable.OrphansSpec + Data.Monoid.OrphansSpec + Data.Traversable.OrphansSpec + Data.Version.OrphansSpec + Foreign.Storable.OrphansSpec + GHC.Fingerprint.OrphansSpec + System.Posix.Types.IntWord + System.Posix.Types.OrphansSpec + default-language: Haskell2010
src/Data/Orphans.hs view
@@ -1,955 +1,865 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveFoldable #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE TypeOperators #-}--#if __GLASGOW_HASKELL__ >= 702-{-# LANGUAGE Trustworthy #-}-#endif--#if __GLASGOW_HASKELL__ >= 706-{-# LANGUAGE PolyKinds #-}-#endif--#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE NullaryTypeClasses #-}-#endif--{-# OPTIONS_GHC -fno-warn-deprecations #-}-{-# OPTIONS_GHC -fno-warn-orphans #-}-{-|-Exports orphan instances that mimic instances available in later versions of @base@.-To use them, simply @import Data.Orphans ()@.--}-module Data.Orphans () where--#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,7,0))-import Numeric (showHex)-#endif--#if !(MIN_VERSION_base(4,4,0))-import Control.Concurrent.SampleVar-import Control.Monad.ST as Strict-import Data.List-#endif--#if !(MIN_VERSION_base(4,4,0)) || (__GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710)-import Data.Fixed-#endif--#if MIN_VERSION_base(4,4,0) && __GLASGOW_HASKELL__ < 710-import GHC.Fingerprint-import GHC.IO.Encoding.Failure--# if !defined(mingw32_HOST_OS) && !defined(__GHCJS__)-import GHC.Event-# endif-#endif--#if __GLASGOW_HASKELL__ >= 701 && __GLASGOW_HASKELL__ < 710-import GHC.Generics as Generics-#endif--#if MIN_VERSION_base(4,5,0) && __GLASGOW_HASKELL__ < 710-import GHC.Stack-import GHC.Stats-#endif--#if !(MIN_VERSION_base(4,5,0))-import Unsafe.Coerce (unsafeCoerce)-#endif--#if MIN_VERSION_base(4,6,0) && __GLASGOW_HASKELL__ < 710-import GHC.ForeignPtr-import GHC.GHCi-import GHC.TypeLits-import System.Posix.Internals-#endif--#if !(MIN_VERSION_base(4,6,0)) || (__GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710)-import Control.Arrow-#endif--#if !(MIN_VERSION_base(4,6,0))-import Control.Monad (MonadPlus(..), ap)-import System.Posix.Types-#endif--#if MIN_VERSION_base(4,7,0) && __GLASGOW_HASKELL__ < 710-import Control.Concurrent.QSem-import Data.Proxy-import Text.Read.Lex (Number)-#endif--#if !(MIN_VERSION_base(4,7,0))-import Data.Word-#endif--#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710-import Control.Category hiding ((.))-import Control.Monad-import Control.Monad.Fix-import Control.Monad.Zip-import Data.Ix-import Data.Type.Coercion-import Data.Type.Equality-import Data.Typeable.Internal-import GHC.IO.BufferedIO-import GHC.IO.Device (IODevice, RawIO)-import GHC.IO.Handle-import GHC.IO.Handle.Types hiding (BufferList, HandleType)-import GHC.IP-import Text.Printf-#endif--#if !(MIN_VERSION_base(4,8,0))-import Data.Complex (Complex(..))-import Data.Version-import Foreign.Ptr (castPtr)-import GHC.Real (Ratio(..), (%))-#endif--#if __GLASGOW_HASKELL__ < 710-import Control.Applicative-import Control.Exception as Exception-import Control.Monad.ST.Lazy as Lazy-import Data.Bits-import Data.Char-import Data.Data as Data-import Data.Foldable-import Data.Monoid as Monoid-import Data.Traversable-import Foreign.C.Error-import Foreign.C.Types-import Foreign.Marshal.Pool-import Foreign.Storable-import GHC.Base-import GHC.Conc-import GHC.Desugar (AnnotationWrapper)-import GHC.Exts as Exts-import GHC.IO.Buffer-import GHC.IO.Device (IODeviceType(..))-import GHC.IO.Encoding-import GHC.IO.Exception as Exception-import GHC.IO.Handle.Types (BufferList, HandleType)-import GHC.ST-import System.Console.GetOpt-import System.IO-import Text.ParserCombinators.ReadP-import Text.ParserCombinators.ReadPrec as ReadPrec-import Text.Read as Read--# if defined(mingw32_HOST_OS)-import GHC.ConsoleHandler as Console-import GHC.IO.Encoding.CodePage.Table-# endif-#endif--#include "HsBaseConfig.h"-----------------------------------------------------------------------------------#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,7,0))-instance Show Fingerprint where- show (Fingerprint w1 w2) = hex16 w1 ++ hex16 w2- where- -- Formats a 64 bit number as 16 digits hex.- hex16 :: Word64 -> String- hex16 i = let hex = showHex i ""- in replicate (16 - length hex) '0' ++ hex-#endif--#if !(MIN_VERSION_base(4,4,0))-instance HasResolution a => Read (Fixed a) where- readsPrec _ = readsFixed--readsFixed :: (HasResolution a) => ReadS (Fixed a)-readsFixed = readsSigned- where readsSigned ('-' : xs) = [ (negate x, rest)- | (x, rest) <- readsUnsigned xs ]- readsSigned xs = readsUnsigned xs- readsUnsigned xs = case span isDigit xs of- ([], _) -> []- (is, xs') ->- let i = fromInteger (read is)- in case xs' of- '.' : xs'' ->- case span isDigit xs'' of- ([], _) -> []- (js, xs''') ->- let j = fromInteger (read js)- l = genericLength js :: Integer- in [(i + (j / (10 ^ l)), xs''')]- _ -> [(i, xs')]--deriving instance Typeable1 SampleVar--instance Applicative (Strict.ST s) where- pure = return- (<*>) = ap--instance Applicative (Lazy.ST s) where- pure = return- (<*>) = ap-#endif---- These instances are only valid if Bits isn't a subclass of Num (as Bool is--- not a Num instance), which is only true as of base-4.6.0.0 and later.-#if MIN_VERSION_base(4,6,0) && !(MIN_VERSION_base(4,7,0))-instance Bits Bool where- (.&.) = (&&)-- (.|.) = (||)-- xor = (/=)-- complement = not-- shift x 0 = x- shift _ _ = False-- rotate x _ = x-- bit 0 = True- bit _ = False-- testBit x 0 = x- testBit _ _ = False-- bitSize _ = 1-- isSigned _ = False-- popCount False = 0- popCount True = 1-#endif--#if !(MIN_VERSION_base(4,6,0))-# if MIN_VERSION_base(4,5,0)-deriving instance Bits CDev-deriving instance Bounded CDev-deriving instance Integral CDev-# else-type HDev = HTYPE_DEV_T--instance Bits CDev where- (.&.) = unsafeCoerce ((.&.) :: HDev -> HDev -> HDev)- (.|.) = unsafeCoerce ((.|.) :: HDev -> HDev -> HDev)- xor = unsafeCoerce (xor :: HDev -> HDev -> HDev)- shift = unsafeCoerce (shift :: HDev -> Int -> HDev)- rotate = unsafeCoerce (rotate :: HDev -> Int -> HDev)- setBit = unsafeCoerce (setBit :: HDev -> Int -> HDev)- clearBit = unsafeCoerce (clearBit :: HDev -> Int -> HDev)- complementBit = unsafeCoerce (complementBit :: HDev -> Int -> HDev)- testBit = unsafeCoerce (testBit :: HDev -> Int -> Bool)- complement = unsafeCoerce (complement :: HDev -> HDev)- bit = unsafeCoerce (bit :: Int -> HDev)- bitSize = unsafeCoerce (bitSize :: HDev -> Int)- isSigned = unsafeCoerce (isSigned :: HDev -> Bool)--instance Bounded CDev where- minBound = unsafeCoerce (minBound :: HDev)- maxBound = unsafeCoerce (maxBound :: HDev)--instance Integral CDev where- quot = unsafeCoerce (quot :: HDev -> HDev -> HDev)- rem = unsafeCoerce (rem :: HDev -> HDev -> HDev)- div = unsafeCoerce (div :: HDev -> HDev -> HDev)- mod = unsafeCoerce (mod :: HDev -> HDev -> HDev)- quotRem = unsafeCoerce (quotRem :: HDev -> HDev -> (HDev, HDev))- divMod = unsafeCoerce (divMod :: HDev -> HDev -> (HDev, HDev))- toInteger = unsafeCoerce (toInteger :: HDev -> Integer)-# endif--instance Applicative ReadP where- pure = return- (<*>) = ap--instance Alternative ReadP where- empty = mzero- (<|>) = mplus--instance Applicative ReadPrec where- pure = return- (<*>) = ap--instance Alternative ReadPrec where- empty = mzero- (<|>) = mplus--instance Functor Exception.Handler where- fmap f (Exception.Handler h) = Exception.Handler (fmap f . h)--instance-# if MIN_VERSION_base(4,4,0)- Arrow a-# else- ArrowApply a-# endif- => Functor (ArrowMonad a) where- fmap f (ArrowMonad m) = ArrowMonad $ m >>> arr f--instance-# if MIN_VERSION_base(4,4,0)- Arrow a-# else- ArrowApply a-# endif- => Applicative (ArrowMonad a) where- pure x = ArrowMonad (arr (const x))- ArrowMonad f <*> ArrowMonad x = ArrowMonad (f &&& x >>> arr (uncurry id))--instance-# if MIN_VERSION_base(4,4,0)- ArrowPlus a-# else- (ArrowApply a, ArrowPlus a)-# endif- => Alternative (ArrowMonad a) where- empty = ArrowMonad zeroArrow- ArrowMonad x <|> ArrowMonad y = ArrowMonad (x <+> y)--instance (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) where- mzero = ArrowMonad zeroArrow- ArrowMonad x `mplus` ArrowMonad y = ArrowMonad (x <+> y)-#endif--#if !(MIN_VERSION_base(4,7,0))-deriving instance Foldable (Const m)-deriving instance Foldable (Either a)-deriving instance Traversable (Const m)-deriving instance Traversable (Either a)--instance Foldable ((,) a) where- foldMap f (_, y) = f y-- foldr f z (_, y) = f y z--instance Traversable ((,) a) where- traverse f (x, y) = (,) x <$> f y--deriving instance Monoid a => Monoid (Const a b)-deriving instance Read a => Read (Down a)-deriving instance Show a => Show (Down a)-deriving instance Eq ErrorCall-deriving instance Ord ErrorCall-deriving instance Num a => Num (Sum a)-deriving instance Num a => Num (Product a)-deriving instance Data Version--- GHC Trac #8218-deriving instance Monad m => Monad (WrappedMonad m)-deriving instance Eq a => Eq (ZipList a)-deriving instance Ord a => Ord (ZipList a)-deriving instance Read a => Read (ZipList a)-deriving instance Show a => Show (ZipList a)-deriving instance Functor ArgOrder-deriving instance Functor OptDescr-deriving instance Functor ArgDescr-#endif--#if __GLASGOW_HASKELL__ >= 701 && !(MIN_VERSION_base(4,7,0))-deriving instance Eq (U1 p)-deriving instance Ord (U1 p)-deriving instance Read (U1 p)-deriving instance Show (U1 p)--deriving instance Eq p => Eq (Par1 p)-deriving instance Ord p => Ord (Par1 p)-deriving instance Read p => Read (Par1 p)-deriving instance Show p => Show (Par1 p)--deriving instance Eq (f p) => Eq (Rec1 f p)-deriving instance Ord (f p) => Ord (Rec1 f p)-deriving instance Read (f p) => Read (Rec1 f p)-deriving instance Show (f p) => Show (Rec1 f p)--deriving instance Eq c => Eq (K1 i c p)-deriving instance Ord c => Ord (K1 i c p)-deriving instance Read c => Read (K1 i c p)-deriving instance Show c => Show (K1 i c p)--deriving instance Eq (f p) => Eq (M1 i c f p)-deriving instance Ord (f p) => Ord (M1 i c f p)-deriving instance Read (f p) => Read (M1 i c f p)-deriving instance Show (f p) => Show (M1 i c f p)--deriving instance (Eq (f p), Eq (g p)) => Eq ((f :+: g) p)-deriving instance (Ord (f p), Ord (g p)) => Ord ((f :+: g) p)-deriving instance (Read (f p), Read (g p)) => Read ((f :+: g) p)-deriving instance (Show (f p), Show (g p)) => Show ((f :+: g) p)--deriving instance (Eq (f p), Eq (g p)) => Eq ((f :*: g) p)-deriving instance (Ord (f p), Ord (g p)) => Ord ((f :*: g) p)--- Due to a GHC bug (https://ghc.haskell.org/trac/ghc/ticket/9830), the derived--- Read and Show instances for infix data constructors will use the wrong--- precedence (prior to GHC 7.10).--- We'll manually derive Read :*: and Show :*: instances to avoid this.-instance (Read (f p), Read (g p)) => Read ((f :*: g) p) where- readPrec = parens . ReadPrec.prec 6 $ do- fp <- ReadPrec.step readPrec- Symbol ":*:" <- lexP- gp <- ReadPrec.step readPrec- return $ fp :*: gp- readListPrec = readListPrecDefault-instance (Show (f p), Show (g p)) => Show ((f :*: g) p) where- showsPrec p (l :*: r) = showParen (p > sixPrec) $- showsPrec (sixPrec + 1) l- . showString " :*: "- . showsPrec (sixPrec + 1) r- where sixPrec = 6--deriving instance Eq (f (g p)) => Eq ((f :.: g) p)-deriving instance Ord (f (g p)) => Ord ((f :.: g) p)-deriving instance Read (f (g p)) => Read ((f :.: g) p)-deriving instance Show (f (g p)) => Show ((f :.: g) p)-#endif--#if MIN_VERSION_base(4,7,0) && !(MIN_VERSION_base(4,8,0))--- | Construct tag-less 'Version'------ /Since: 4.8.0.0/-makeVersion :: [Int] -> Version-makeVersion b = Version b []---- | /Since: 4.8.0.0/-instance IsList Version where- type (Item Version) = Int- fromList = makeVersion- toList = versionBranch-#endif--#if !(MIN_VERSION_base(4,8,0))-deriving instance Eq a => Eq (Const a b)-deriving instance Ord a => Ord (Const a b)--instance Read a => Read (Const a b) where- readsPrec d = readParen (d > 10)- $ \r -> [(Const x,t) | ("Const", s) <- lex r, (x, t) <- readsPrec 11 s]--instance Show a => Show (Const a b) where- showsPrec d (Const x) = showParen (d > 10) $- showString "Const " . showsPrec 11 x--deriving instance Functor First-deriving instance Applicative First-deriving instance Monad First-deriving instance Functor Last-deriving instance Applicative Last-deriving instance Monad Last---- In base-4.3 and earlier, pattern matching on a Complex value invokes a--- RealFloat constraint due to the use of the DatatypeContexts extension.-# if MIN_VERSION_base(4,4,0)-instance Storable a-# else-instance (Storable a, RealFloat a)-# endif- => Storable (Complex a) where- sizeOf (a :+ _) = 2 * sizeOf a- alignment (a :+ _) = alignment a- peek p = do- q <- return $ castPtr p- r <- peek q- i <- peekElemOff q 1- return (r :+ i)- poke p (r :+ i) = do- q <-return $ (castPtr p)- poke q r- pokeElemOff q 1 i--instance (Storable a, Integral a) => Storable (Ratio a) where- sizeOf (n :% _) = 2 * sizeOf n- alignment (n :% _) = alignment n- peek p = do- q <- return $ castPtr p- r <- peek q- i <- peekElemOff q 1- return (r % i)- poke p (r :% i) = do- q <-return $ (castPtr p)- poke q r- pokeElemOff q 1 i-#endif--#if __GLASGOW_HASKELL__ < 710-deriving instance Typeable All-deriving instance Typeable AnnotationWrapper-deriving instance Typeable Monoid.Any-deriving instance Typeable1 ArgDescr-deriving instance Typeable1 ArgOrder-deriving instance Typeable BlockReason-deriving instance Typeable1 Buffer-deriving instance Typeable3 BufferCodec-deriving instance Typeable1 BufferList-deriving instance Typeable BufferMode-deriving instance Typeable BufferState-deriving instance Typeable CFile-deriving instance Typeable CFpos-deriving instance Typeable CJmpBuf-deriving instance Typeable2 Const-deriving instance Typeable Constr-deriving instance Typeable ConstrRep-deriving instance Typeable DataRep-deriving instance Typeable DataType-deriving instance Typeable1 Dual-deriving instance Typeable1 Endo-deriving instance Typeable Errno-deriving instance Typeable1 First-deriving instance Typeable Data.Fixity-deriving instance Typeable GeneralCategory-deriving instance Typeable HandlePosn-deriving instance Typeable1 Exception.Handler-deriving instance Typeable HandleType-deriving instance Typeable IODeviceType-deriving instance Typeable IOErrorType-deriving instance Typeable IOMode-deriving instance Typeable1 Last-deriving instance Typeable Lexeme-deriving instance Typeable Newline-deriving instance Typeable NewlineMode-deriving instance Typeable Opaque-deriving instance Typeable1 OptDescr-deriving instance Typeable Pool-deriving instance Typeable1 Product-deriving instance Typeable1 ReadP-deriving instance Typeable1 ReadPrec-deriving instance Typeable SeekMode-deriving instance Typeable2 Lazy.ST-deriving instance Typeable2 STret-deriving instance Typeable1 Sum-deriving instance Typeable TextEncoding-deriving instance Typeable ThreadStatus-deriving instance Typeable1 ZipList--# if defined(mingw32_HOST_OS)-deriving instance Typeable CodePageArrays-deriving instance Typeable2 CompactArray-deriving instance Typeable1 ConvArray-deriving instance Typeable Console.Handler-# endif--# if MIN_VERSION_base(4,3,0)-deriving instance Typeable MaskingState-# endif--# if MIN_VERSION_base(4,4,0)-deriving instance Typeable CodingFailureMode-deriving instance Typeable CodingProgress-deriving instance Typeable Fingerprint--# if !defined(mingw32_HOST_OS) && !defined(__GHCJS__)-deriving instance Typeable Event-deriving instance Typeable EventManager-deriving instance Typeable FdKey-deriving instance Typeable TimeoutKey-# endif-# endif--# if __GLASGOW_HASKELL__ >= 701-deriving instance Typeable Arity-deriving instance Typeable Associativity-deriving instance Typeable C-deriving instance Typeable D-deriving instance Typeable Generics.Fixity-deriving instance Typeable3 K1-deriving instance Typeable NoSelector-deriving instance Typeable P-deriving instance Typeable1 Par1-deriving instance Typeable R-deriving instance Typeable S-deriving instance Typeable1 U1-deriving instance Typeable1 V1-# endif--# if MIN_VERSION_base(4,5,0)-deriving instance Typeable CostCentre-deriving instance Typeable CostCentreStack-deriving instance Typeable GCStats-# endif--# if MIN_VERSION_base(4,6,0)-deriving instance Typeable CSigset-deriving instance Typeable1 Down-deriving instance Typeable ForeignPtrContents-deriving instance Typeable Nat-deriving instance Typeable1 NoIO-deriving instance Typeable Symbol-# endif--# if MIN_VERSION_ghc_prim(0,3,1)-deriving instance Typeable SPEC-# endif--# if MIN_VERSION_base(4,7,0)-deriving instance Typeable FieldFormat-deriving instance Typeable FormatAdjustment-deriving instance Typeable FormatParse-deriving instance Typeable FormatSign-deriving instance Typeable KProxy-deriving instance Typeable Number-deriving instance Typeable SomeNat-deriving instance Typeable SomeSymbol-deriving instance Typeable QSem -- This instance seems to have been removed- -- (accidentally?) in base-4.7.0.0-# endif--# if __GLASGOW_HASKELL__ >= 708--- Data types which have more than seven type arguments-deriving instance Typeable (,,,,,,,)-deriving instance Typeable (,,,,,,,,)-deriving instance Typeable (,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)---- Data types which require PolyKinds-deriving instance Typeable (:+:)-deriving instance Typeable (:*:)-deriving instance Typeable (:.:)-deriving instance Typeable Exts.Any-deriving instance Typeable ArrowMonad-deriving instance Typeable Kleisli-deriving instance Typeable M1-deriving instance Typeable Rec1-deriving instance Typeable WrappedArrow-deriving instance Typeable WrappedMonad---- Typeclasses-deriving instance Typeable Arrow-deriving instance Typeable ArrowApply-deriving instance Typeable ArrowChoice-deriving instance Typeable ArrowLoop-deriving instance Typeable ArrowZero-deriving instance Typeable Bits-deriving instance Typeable Bounded-deriving instance Typeable BufferedIO-deriving instance Typeable Category-deriving instance Typeable Coercible-deriving instance Typeable Constructor-deriving instance Typeable Data-deriving instance Typeable Datatype-deriving instance Typeable Enum-deriving instance Typeable Exception-deriving instance Typeable Eq-deriving instance Typeable FiniteBits-deriving instance Typeable Floating-deriving instance Typeable Foldable-deriving instance Typeable Fractional-deriving instance Typeable Functor-deriving instance Typeable Generic-deriving instance Typeable Generic1-deriving instance Typeable GHCiSandboxIO-deriving instance Typeable HasResolution-deriving instance Typeable HPrintfType-deriving instance Typeable Integral-deriving instance Typeable IODevice-deriving instance Typeable IP-deriving instance Typeable IsChar-deriving instance Typeable IsList-deriving instance Typeable IsString-deriving instance Typeable Ix-deriving instance Typeable KnownNat-deriving instance Typeable KnownSymbol-deriving instance Typeable Monad-deriving instance Typeable MonadFix-deriving instance Typeable MonadPlus-deriving instance Typeable MonadZip-deriving instance Typeable Num-deriving instance Typeable Ord-deriving instance Typeable PrintfArg-deriving instance Typeable PrintfType-deriving instance Typeable RawIO-deriving instance Typeable Read-deriving instance Typeable Real-deriving instance Typeable RealFloat-deriving instance Typeable RealFrac-deriving instance Typeable Selector-deriving instance Typeable Show-deriving instance Typeable Storable-deriving instance Typeable TestCoercion-deriving instance Typeable TestEquality-deriving instance Typeable Traversable-deriving instance Typeable Typeable---- Constraints-deriving instance Typeable (~)-deriving instance Typeable Constraint---- Promoted data constructors-deriving instance Typeable '()-deriving instance Typeable '(,)-deriving instance Typeable '(,,)-deriving instance Typeable '(,,,)-deriving instance Typeable '(,,,,)-deriving instance Typeable '(,,,,,)-deriving instance Typeable '(,,,,,,)-deriving instance Typeable '(,,,,,,,)-deriving instance Typeable '(,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)-deriving instance Typeable '[]-deriving instance Typeable '(:)-deriving instance Typeable '(:%)-deriving instance Typeable '(:+)-deriving instance Typeable 'AbsoluteSeek-deriving instance Typeable 'All-deriving instance Typeable 'AlreadyExists-deriving instance Typeable 'Any-deriving instance Typeable 'AppendHandle-deriving instance Typeable 'AppendMode-deriving instance Typeable 'BlockedIndefinitelyOnMVar-deriving instance Typeable 'BlockedIndefinitelyOnSTM-deriving instance Typeable 'BlockedOnBlackHole-deriving instance Typeable 'BlockedOnException-deriving instance Typeable 'BlockedOnForeignCall-deriving instance Typeable 'BlockedOnMVar-deriving instance Typeable 'BlockedOnOther-deriving instance Typeable 'BlockedOnSTM-deriving instance Typeable 'ClosedHandle-deriving instance Typeable 'ClosePunctuation-deriving instance Typeable 'ConnectorPunctuation-deriving instance Typeable 'Const-deriving instance Typeable 'Control-deriving instance Typeable 'CRLF-deriving instance Typeable 'CurrencySymbol-deriving instance Typeable 'DashPunctuation-deriving instance Typeable 'Deadlock-deriving instance Typeable 'DecimalNumber-deriving instance Typeable 'Denormal-deriving instance Typeable 'Directory-deriving instance Typeable 'DivideByZero-deriving instance Typeable 'Down-deriving instance Typeable 'Dual-deriving instance Typeable 'EnclosingMark-deriving instance Typeable 'Endo-deriving instance Typeable 'Exception.EOF-deriving instance Typeable 'EQ-deriving instance Typeable 'ErrorOnCodingFailure-deriving instance Typeable 'False-deriving instance Typeable 'FinalQuote-deriving instance Typeable 'First-deriving instance Typeable 'ForceSpecConstr-deriving instance Typeable 'Format-deriving instance Typeable 'GT-deriving instance Typeable 'HardwareFault-deriving instance Typeable 'HeapOverflow-deriving instance Typeable 'IgnoreCodingFailure-deriving instance Typeable 'IllegalOperation-deriving instance Typeable 'InappropriateType-deriving instance Typeable 'Data.Infix-deriving instance Typeable 'InitialQuote-deriving instance Typeable 'InputUnderflow-deriving instance Typeable 'Interrupted-deriving instance Typeable 'InvalidArgument-deriving instance Typeable 'InvalidSequence-deriving instance Typeable 'Just-deriving instance Typeable 'K1-deriving instance Typeable 'KProxy-deriving instance Typeable 'Last-deriving instance Typeable 'Left-deriving instance Typeable 'LeftAdjust-deriving instance Typeable 'LeftAssociative-deriving instance Typeable 'LetterNumber-deriving instance Typeable 'LF-deriving instance Typeable 'LineSeparator-deriving instance Typeable 'LossOfPrecision-deriving instance Typeable 'LowercaseLetter-deriving instance Typeable 'LT-deriving instance Typeable 'MaskedInterruptible-deriving instance Typeable 'MaskedUninterruptible-deriving instance Typeable 'MathSymbol-deriving instance Typeable 'ModifierLetter-deriving instance Typeable 'ModifierSymbol-deriving instance Typeable 'NestedAtomically-deriving instance Typeable 'NewlineMode-deriving instance Typeable 'NonSpacingMark-deriving instance Typeable 'NonTermination-deriving instance Typeable 'NoSpecConstr-deriving instance Typeable 'NoSuchThing-deriving instance Typeable 'NotAssigned-deriving instance Typeable 'NotAssociative-deriving instance Typeable 'Nothing-deriving instance Typeable 'O-deriving instance Typeable 'OpenPunctuation-deriving instance Typeable 'OtherError-deriving instance Typeable 'OtherLetter-deriving instance Typeable 'OtherNumber-deriving instance Typeable 'OtherPunctuation-deriving instance Typeable 'OtherSymbol-deriving instance Typeable 'OutputUnderflow-deriving instance Typeable 'Overflow-deriving instance Typeable 'Par1-deriving instance Typeable 'ParagraphSeparator-deriving instance Typeable 'PermissionDenied-deriving instance Typeable 'Data.Prefix-deriving instance Typeable 'PrivateUse-deriving instance Typeable 'Product-deriving instance Typeable 'ProtocolError-deriving instance Typeable 'RatioZeroDenominator-deriving instance Typeable 'RawDevice-deriving instance Typeable 'ReadBuffer-deriving instance Typeable 'ReadHandle-deriving instance Typeable 'ReadMode-deriving instance Typeable 'ReadWriteHandle-deriving instance Typeable 'ReadWriteMode-deriving instance Typeable 'RegularFile-deriving instance Typeable 'RelativeSeek-deriving instance Typeable 'ResourceBusy-deriving instance Typeable 'ResourceExhausted-deriving instance Typeable 'ResourceVanished-deriving instance Typeable 'Right-deriving instance Typeable 'RightAssociative-deriving instance Typeable 'RoundtripFailure-deriving instance Typeable 'SeekFromEnd-deriving instance Typeable 'SemiClosedHandle-deriving instance Typeable 'SignPlus-deriving instance Typeable 'SignSpace-deriving instance Typeable 'Space-deriving instance Typeable 'SpacingCombiningMark-deriving instance Typeable 'SPEC-deriving instance Typeable 'SPEC2-deriving instance Typeable 'StackOverflow-deriving instance Typeable 'Stream-deriving instance Typeable 'Sum-deriving instance Typeable 'Surrogate-deriving instance Typeable 'SystemError-deriving instance Typeable 'ThreadBlocked-deriving instance Typeable 'ThreadDied-deriving instance Typeable 'ThreadFinished-deriving instance Typeable 'ThreadKilled-deriving instance Typeable 'ThreadRunning-deriving instance Typeable 'TimeExpired-deriving instance Typeable 'TitlecaseLetter-deriving instance Typeable 'TransliterateCodingFailure-deriving instance Typeable 'True-deriving instance Typeable 'U1-deriving instance Typeable 'Underflow-deriving instance Typeable 'Unmasked-deriving instance Typeable 'UnsatisfiedConstraints-deriving instance Typeable 'UnsupportedOperation-deriving instance Typeable 'UppercaseLetter-deriving instance Typeable 'UserError-deriving instance Typeable 'UserInterrupt-deriving instance Typeable 'WriteBuffer-deriving instance Typeable 'WriteHandle-deriving instance Typeable 'WriteMode-deriving instance Typeable 'ZeroPad-deriving instance Typeable 'ZipList--# if defined(mingw32_HOST_OS)-deriving instance Typeable 'Break-deriving instance Typeable 'Close-deriving instance Typeable 'ControlC-deriving instance Typeable 'Logoff-deriving instance Typeable 'Shutdown-# endif-# endif--#endif+{-# LANGUAGE CPP #-} +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE DeriveFoldable #-} +{-# LANGUAGE DeriveFunctor #-} +{-# LANGUAGE DeriveTraversable #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} + +#if __GLASGOW_HASKELL__ >= 702 +{-# LANGUAGE Trustworthy #-} +#endif + +#if __GLASGOW_HASKELL__ >= 706 +{-# LANGUAGE PolyKinds #-} +#endif + +#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710 +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NullaryTypeClasses #-} +#endif + +{-# OPTIONS_GHC -fno-warn-deprecations #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} +{-| +Exports orphan instances that mimic instances available in later versions of @base@. +To use them, simply @import Data.Orphans ()@. +-} +module Data.Orphans () where + +#if !(MIN_VERSION_base(4,4,0)) +import Control.Monad.ST as Strict +#endif + +#if __GLASGOW_HASKELL__ >= 701 && __GLASGOW_HASKELL__ < 710 +import GHC.Generics as Generics +#endif + +#if __GLASGOW_HASKELL__ < 710 +import Control.Exception as Exception +import Control.Monad.ST.Lazy as Lazy +import Data.Data as Data +import qualified Data.Foldable as F (Foldable(..)) +import Data.Monoid as Monoid +import qualified Data.Traversable as T (Traversable(..)) +import GHC.Exts as Exts +import GHC.IO.Exception as Exception +import Text.ParserCombinators.ReadP as ReadP +import Text.ParserCombinators.ReadPrec as ReadPrec +import Text.Read as Read + +# if defined(mingw32_HOST_OS) +import GHC.ConsoleHandler as Console +# endif +#endif + +#if !(MIN_VERSION_base(4,8,0)) +import Data.Orphans.Prelude +#endif + +#include "HsBaseConfig.h" + +------------------------------------------------------------------------------- + +#if MIN_VERSION_base(4,4,0) && !(MIN_VERSION_base(4,7,0)) +instance Show Fingerprint where + show (Fingerprint w1 w2) = hex16 w1 ++ hex16 w2 + where + -- Formats a 64 bit number as 16 digits hex. + hex16 :: Word64 -> String + hex16 i = let hex = showHex i "" + in replicate (16 - length hex) '0' ++ hex +#endif + +#if !(MIN_VERSION_base(4,4,0)) +instance HasResolution a => Read (Fixed a) where + readsPrec _ = readsFixed + +readsFixed :: (HasResolution a) => ReadS (Fixed a) +readsFixed = readsSigned + where readsSigned ('-' : xs) = [ (negate x, rest) + | (x, rest) <- readsUnsigned xs ] + readsSigned xs = readsUnsigned xs + readsUnsigned xs = case span isDigit xs of + ([], _) -> [] + (is, xs') -> + let i = fromInteger (read is) + in case xs' of + '.' : xs'' -> + case span isDigit xs'' of + ([], _) -> [] + (js, xs''') -> + let j = fromInteger (read js) + l = genericLength js :: Integer + in [(i + (j / (10 ^ l)), xs''')] + _ -> [(i, xs')] + +deriving instance Typeable1 SampleVar + +instance Applicative (Strict.ST s) where + pure = return + (<*>) = ap + +instance Applicative (Lazy.ST s) where + pure = return + (<*>) = ap +#endif + +-- These instances are only valid if Bits isn't a subclass of Num (as Bool is +-- not a Num instance), which is only true as of base-4.6.0.0 and later. +#if MIN_VERSION_base(4,6,0) && !(MIN_VERSION_base(4,7,0)) +instance Bits Bool where + (.&.) = (&&) + + (.|.) = (||) + + xor = (/=) + + complement = not + + shift x 0 = x + shift _ _ = False + + rotate x _ = x + + bit 0 = True + bit _ = False + + testBit x 0 = x + testBit _ _ = False + + bitSize _ = 1 + + isSigned _ = False + + popCount False = 0 + popCount True = 1 +#endif + +#if !(MIN_VERSION_base(4,6,0)) +# if defined(HTYPE_DEV_T) +# if MIN_VERSION_base(4,5,0) +deriving instance Bits CDev +deriving instance Bounded CDev +deriving instance Integral CDev +# else +type HDev = HTYPE_DEV_T + +instance Bits CDev where + (.&.) = unsafeCoerce ((.&.) :: HDev -> HDev -> HDev) + (.|.) = unsafeCoerce ((.|.) :: HDev -> HDev -> HDev) + xor = unsafeCoerce (xor :: HDev -> HDev -> HDev) + shift = unsafeCoerce (shift :: HDev -> Int -> HDev) + rotate = unsafeCoerce (rotate :: HDev -> Int -> HDev) + setBit = unsafeCoerce (setBit :: HDev -> Int -> HDev) + clearBit = unsafeCoerce (clearBit :: HDev -> Int -> HDev) + complementBit = unsafeCoerce (complementBit :: HDev -> Int -> HDev) + testBit = unsafeCoerce (testBit :: HDev -> Int -> Bool) + complement = unsafeCoerce (complement :: HDev -> HDev) + bit = unsafeCoerce (bit :: Int -> HDev) + bitSize = unsafeCoerce (bitSize :: HDev -> Int) + isSigned = unsafeCoerce (isSigned :: HDev -> Bool) + +instance Bounded CDev where + minBound = unsafeCoerce (minBound :: HDev) + maxBound = unsafeCoerce (maxBound :: HDev) + +instance Integral CDev where + quot = unsafeCoerce (quot :: HDev -> HDev -> HDev) + rem = unsafeCoerce (rem :: HDev -> HDev -> HDev) + div = unsafeCoerce (div :: HDev -> HDev -> HDev) + mod = unsafeCoerce (mod :: HDev -> HDev -> HDev) + quotRem = unsafeCoerce (quotRem :: HDev -> HDev -> (HDev, HDev)) + divMod = unsafeCoerce (divMod :: HDev -> HDev -> (HDev, HDev)) + toInteger = unsafeCoerce (toInteger :: HDev -> Integer) +# endif +# endif + +instance Applicative ReadP where + pure = return + (<*>) = ap + +instance Alternative ReadP where + empty = mzero + (<|>) = mplus + +instance Applicative ReadPrec where + pure = return + (<*>) = ap + +instance Alternative ReadPrec where + empty = mzero + (<|>) = mplus + +instance Functor Exception.Handler where + fmap f (Exception.Handler h) = Exception.Handler (fmap f . h) + +instance +# if MIN_VERSION_base(4,4,0) + Arrow a +# else + ArrowApply a +# endif + => Functor (ArrowMonad a) where + fmap f (ArrowMonad m) = ArrowMonad $ m >>> arr f + +instance +# if MIN_VERSION_base(4,4,0) + Arrow a +# else + ArrowApply a +# endif + => Applicative (ArrowMonad a) where + pure x = ArrowMonad (arr (const x)) + ArrowMonad f <*> ArrowMonad x = ArrowMonad (f &&& x >>> arr (uncurry id)) + +instance +# if MIN_VERSION_base(4,4,0) + ArrowPlus a +# else + (ArrowApply a, ArrowPlus a) +# endif + => Alternative (ArrowMonad a) where + empty = ArrowMonad zeroArrow + ArrowMonad x <|> ArrowMonad y = ArrowMonad (x <+> y) + +instance (ArrowApply a, ArrowPlus a) => MonadPlus (ArrowMonad a) where + mzero = ArrowMonad zeroArrow + ArrowMonad x `mplus` ArrowMonad y = ArrowMonad (x <+> y) +#endif + +#if !(MIN_VERSION_base(4,7,0)) +deriving instance F.Foldable (Const m) +deriving instance F.Foldable (Either a) +deriving instance T.Traversable (Const m) +deriving instance T.Traversable (Either a) + +instance F.Foldable ((,) a) where + foldMap f (_, y) = f y + + foldr f z (_, y) = f y z + +instance T.Traversable ((,) a) where + traverse f (x, y) = (,) x <$> f y + +deriving instance Monoid a => Monoid (Const a b) +deriving instance Read a => Read (Down a) +deriving instance Show a => Show (Down a) +deriving instance Eq ErrorCall +deriving instance Ord ErrorCall +deriving instance Num a => Num (Sum a) +deriving instance Num a => Num (Product a) +deriving instance Data Version +-- GHC Trac #8218 +deriving instance Monad m => Monad (WrappedMonad m) +deriving instance Eq a => Eq (ZipList a) +deriving instance Ord a => Ord (ZipList a) +deriving instance Read a => Read (ZipList a) +deriving instance Show a => Show (ZipList a) +deriving instance Functor ArgOrder +deriving instance Functor OptDescr +deriving instance Functor ArgDescr +#endif + +#if __GLASGOW_HASKELL__ >= 701 && !(MIN_VERSION_base(4,7,0)) +deriving instance Eq (U1 p) +deriving instance Ord (U1 p) +deriving instance Read (U1 p) +deriving instance Show (U1 p) + +deriving instance Eq p => Eq (Par1 p) +deriving instance Ord p => Ord (Par1 p) +deriving instance Read p => Read (Par1 p) +deriving instance Show p => Show (Par1 p) + +deriving instance Eq (f p) => Eq (Rec1 f p) +deriving instance Ord (f p) => Ord (Rec1 f p) +deriving instance Read (f p) => Read (Rec1 f p) +deriving instance Show (f p) => Show (Rec1 f p) + +deriving instance Eq c => Eq (K1 i c p) +deriving instance Ord c => Ord (K1 i c p) +deriving instance Read c => Read (K1 i c p) +deriving instance Show c => Show (K1 i c p) + +deriving instance Eq (f p) => Eq (M1 i c f p) +deriving instance Ord (f p) => Ord (M1 i c f p) +deriving instance Read (f p) => Read (M1 i c f p) +deriving instance Show (f p) => Show (M1 i c f p) + +deriving instance (Eq (f p), Eq (g p)) => Eq ((f :+: g) p) +deriving instance (Ord (f p), Ord (g p)) => Ord ((f :+: g) p) +deriving instance (Read (f p), Read (g p)) => Read ((f :+: g) p) +deriving instance (Show (f p), Show (g p)) => Show ((f :+: g) p) + +deriving instance (Eq (f p), Eq (g p)) => Eq ((f :*: g) p) +deriving instance (Ord (f p), Ord (g p)) => Ord ((f :*: g) p) +-- Due to a GHC bug (https://ghc.haskell.org/trac/ghc/ticket/9830), the derived +-- Read and Show instances for infix data constructors will use the wrong +-- precedence (prior to GHC 7.10). +-- We'll manually derive Read :*: and Show :*: instances to avoid this. +instance (Read (f p), Read (g p)) => Read ((f :*: g) p) where + readPrec = parens . ReadPrec.prec 6 $ do + fp <- ReadPrec.step readPrec + Symbol ":*:" <- lexP + gp <- ReadPrec.step readPrec + return $ fp :*: gp + readListPrec = readListPrecDefault +instance (Show (f p), Show (g p)) => Show ((f :*: g) p) where + showsPrec p (l :*: r) = showParen (p > sixPrec) $ + showsPrec (sixPrec + 1) l + . showString " :*: " + . showsPrec (sixPrec + 1) r + where sixPrec = 6 + +deriving instance Eq (f (g p)) => Eq ((f :.: g) p) +deriving instance Ord (f (g p)) => Ord ((f :.: g) p) +deriving instance Read (f (g p)) => Read ((f :.: g) p) +deriving instance Show (f (g p)) => Show ((f :.: g) p) +#endif + +#if MIN_VERSION_base(4,7,0) && !(MIN_VERSION_base(4,8,0)) +-- | Construct tag-less 'Version' +-- +-- /Since: 4.8.0.0/ +makeVersion :: [Int] -> Version +makeVersion b = Version b [] + +-- | /Since: 4.8.0.0/ +instance IsList Version where + type (Item Version) = Int + fromList = makeVersion + toList = versionBranch +#endif + +#if !(MIN_VERSION_base(4,8,0)) +deriving instance Eq a => Eq (Const a b) +deriving instance Ord a => Ord (Const a b) + +instance Read a => Read (Const a b) where + readsPrec d = readParen (d > 10) + $ \r -> [(Const x,t) | ("Const", s) <- lex r, (x, t) <- readsPrec 11 s] + +instance Show a => Show (Const a b) where + showsPrec d (Const x) = showParen (d > 10) $ + showString "Const " . showsPrec 11 x + +deriving instance Functor First +deriving instance Applicative First +deriving instance Monad First +deriving instance Functor Last +deriving instance Applicative Last +deriving instance Monad Last + +-- In base-4.3 and earlier, pattern matching on a Complex value invokes a +-- RealFloat constraint due to the use of the DatatypeContexts extension. +# if MIN_VERSION_base(4,4,0) +instance Storable a +# else +instance (Storable a, RealFloat a) +# endif + => Storable (Complex a) where + sizeOf (a :+ _) = 2 * sizeOf a + alignment (a :+ _) = alignment a + peek p = do + q <- return $ castPtr p + r <- peek q + i <- peekElemOff q 1 + return (r :+ i) + poke p (r :+ i) = do + q <-return $ (castPtr p) + poke q r + pokeElemOff q 1 i + +instance (Storable a, Integral a) => Storable (Ratio a) where + sizeOf (n :% _) = 2 * sizeOf n + alignment (n :% _) = alignment n + peek p = do + q <- return $ castPtr p + r <- peek q + i <- peekElemOff q 1 + return (r % i) + poke p (r :% i) = do + q <-return $ (castPtr p) + poke q r + pokeElemOff q 1 i +#endif + +#if __GLASGOW_HASKELL__ < 710 +deriving instance Typeable All +deriving instance Typeable AnnotationWrapper +deriving instance Typeable Monoid.Any +deriving instance Typeable1 ArgDescr +deriving instance Typeable1 ArgOrder +deriving instance Typeable BlockReason +deriving instance Typeable1 Buffer +deriving instance Typeable3 BufferCodec +deriving instance Typeable1 BufferList +deriving instance Typeable BufferMode +deriving instance Typeable BufferState +deriving instance Typeable CFile +deriving instance Typeable CFpos +deriving instance Typeable CJmpBuf +deriving instance Typeable2 Const +deriving instance Typeable Constr +deriving instance Typeable ConstrRep +deriving instance Typeable DataRep +deriving instance Typeable DataType +deriving instance Typeable1 Dual +deriving instance Typeable1 Endo +deriving instance Typeable Errno +deriving instance Typeable1 First +deriving instance Typeable Data.Fixity +deriving instance Typeable GeneralCategory +deriving instance Typeable HandlePosn +deriving instance Typeable1 Exception.Handler +deriving instance Typeable HandleType +deriving instance Typeable IODeviceType +deriving instance Typeable IOErrorType +deriving instance Typeable IOMode +deriving instance Typeable1 Last +deriving instance Typeable Lexeme +deriving instance Typeable Newline +deriving instance Typeable NewlineMode +deriving instance Typeable Opaque +deriving instance Typeable1 OptDescr +deriving instance Typeable Pool +deriving instance Typeable1 Product +deriving instance Typeable1 ReadP +deriving instance Typeable1 ReadPrec +deriving instance Typeable SeekMode +deriving instance Typeable2 Lazy.ST +deriving instance Typeable2 STret +deriving instance Typeable1 Sum +deriving instance Typeable TextEncoding +deriving instance Typeable ThreadStatus +deriving instance Typeable1 ZipList + +# if defined(mingw32_HOST_OS) +deriving instance Typeable CodePageArrays +deriving instance Typeable2 CompactArray +deriving instance Typeable1 ConvArray +deriving instance Typeable Console.Handler +# endif + +# if MIN_VERSION_base(4,3,0) +deriving instance Typeable MaskingState +# endif + +# if MIN_VERSION_base(4,4,0) +deriving instance Typeable CodingFailureMode +deriving instance Typeable CodingProgress +deriving instance Typeable Fingerprint + +# if !defined(mingw32_HOST_OS) && !defined(__GHCJS__) +deriving instance Typeable Event +deriving instance Typeable EventManager +deriving instance Typeable FdKey +deriving instance Typeable TimeoutKey +# endif +# endif + +# if __GLASGOW_HASKELL__ >= 701 +deriving instance Typeable Arity +deriving instance Typeable Associativity +deriving instance Typeable C +deriving instance Typeable D +deriving instance Typeable Generics.Fixity +deriving instance Typeable3 K1 +deriving instance Typeable NoSelector +deriving instance Typeable P +deriving instance Typeable1 Par1 +deriving instance Typeable R +deriving instance Typeable S +deriving instance Typeable1 U1 +deriving instance Typeable1 V1 +# endif + +# if MIN_VERSION_base(4,5,0) +deriving instance Typeable CostCentre +deriving instance Typeable CostCentreStack +deriving instance Typeable GCStats +# endif + +# if MIN_VERSION_base(4,6,0) +deriving instance Typeable CSigset +deriving instance Typeable1 Down +deriving instance Typeable ForeignPtrContents +deriving instance Typeable Nat +deriving instance Typeable1 NoIO +deriving instance Typeable Symbol +# endif + +# if MIN_VERSION_ghc_prim(0,3,1) +deriving instance Typeable SPEC +# endif + +# if MIN_VERSION_base(4,7,0) +deriving instance Typeable FieldFormat +deriving instance Typeable FormatAdjustment +deriving instance Typeable FormatParse +deriving instance Typeable FormatSign +deriving instance Typeable KProxy +deriving instance Typeable Number +deriving instance Typeable SomeNat +deriving instance Typeable SomeSymbol +deriving instance Typeable QSem -- This instance seems to have been removed + -- (accidentally?) in base-4.7.0.0 +# endif + +# if __GLASGOW_HASKELL__ >= 708 +-- Data types which have more than seven type arguments +deriving instance Typeable (,,,,,,,) +deriving instance Typeable (,,,,,,,,) +deriving instance Typeable (,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) + +-- Data types which require PolyKinds +deriving instance Typeable (:+:) +deriving instance Typeable (:*:) +deriving instance Typeable (:.:) +deriving instance Typeable Exts.Any +deriving instance Typeable ArrowMonad +deriving instance Typeable Kleisli +deriving instance Typeable M1 +deriving instance Typeable Rec1 +deriving instance Typeable WrappedArrow +deriving instance Typeable WrappedMonad + +-- Typeclasses +deriving instance Typeable Arrow +deriving instance Typeable ArrowApply +deriving instance Typeable ArrowChoice +deriving instance Typeable ArrowLoop +deriving instance Typeable ArrowZero +deriving instance Typeable Bits +deriving instance Typeable Bounded +deriving instance Typeable BufferedIO +deriving instance Typeable Category +deriving instance Typeable Coercible +deriving instance Typeable Constructor +deriving instance Typeable Data +deriving instance Typeable Datatype +deriving instance Typeable Enum +deriving instance Typeable Exception +deriving instance Typeable Eq +deriving instance Typeable FiniteBits +deriving instance Typeable Floating +deriving instance Typeable F.Foldable +deriving instance Typeable Fractional +deriving instance Typeable Functor +deriving instance Typeable Generic +deriving instance Typeable Generic1 +deriving instance Typeable GHCiSandboxIO +deriving instance Typeable HasResolution +deriving instance Typeable HPrintfType +deriving instance Typeable Integral +deriving instance Typeable IODevice +deriving instance Typeable IP +deriving instance Typeable IsChar +deriving instance Typeable IsList +deriving instance Typeable IsString +deriving instance Typeable Ix +deriving instance Typeable KnownNat +deriving instance Typeable KnownSymbol +deriving instance Typeable Monad +deriving instance Typeable MonadFix +deriving instance Typeable MonadPlus +deriving instance Typeable MonadZip +deriving instance Typeable Num +deriving instance Typeable Ord +deriving instance Typeable PrintfArg +deriving instance Typeable PrintfType +deriving instance Typeable RawIO +deriving instance Typeable Read +deriving instance Typeable Real +deriving instance Typeable RealFloat +deriving instance Typeable RealFrac +deriving instance Typeable Selector +deriving instance Typeable Show +deriving instance Typeable Storable +deriving instance Typeable TestCoercion +deriving instance Typeable TestEquality +deriving instance Typeable T.Traversable +deriving instance Typeable Typeable + +-- Constraints +deriving instance Typeable (~) +deriving instance Typeable Constraint + +-- Promoted data constructors +deriving instance Typeable '() +deriving instance Typeable '(,) +deriving instance Typeable '(,,) +deriving instance Typeable '(,,,) +deriving instance Typeable '(,,,,) +deriving instance Typeable '(,,,,,) +deriving instance Typeable '(,,,,,,) +deriving instance Typeable '(,,,,,,,) +deriving instance Typeable '(,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) +deriving instance Typeable '[] +deriving instance Typeable '(:) +deriving instance Typeable '(:%) +deriving instance Typeable '(:+) +deriving instance Typeable 'AbsoluteSeek +deriving instance Typeable 'All +deriving instance Typeable 'AlreadyExists +deriving instance Typeable 'Any +deriving instance Typeable 'AppendHandle +deriving instance Typeable 'AppendMode +deriving instance Typeable 'BlockedIndefinitelyOnMVar +deriving instance Typeable 'BlockedIndefinitelyOnSTM +deriving instance Typeable 'BlockedOnBlackHole +deriving instance Typeable 'BlockedOnException +deriving instance Typeable 'BlockedOnForeignCall +deriving instance Typeable 'BlockedOnMVar +deriving instance Typeable 'BlockedOnOther +deriving instance Typeable 'BlockedOnSTM +deriving instance Typeable 'ClosedHandle +deriving instance Typeable 'ClosePunctuation +deriving instance Typeable 'ConnectorPunctuation +deriving instance Typeable 'Const +deriving instance Typeable 'Control +deriving instance Typeable 'CRLF +deriving instance Typeable 'CurrencySymbol +deriving instance Typeable 'DashPunctuation +deriving instance Typeable 'Deadlock +deriving instance Typeable 'DecimalNumber +deriving instance Typeable 'Denormal +deriving instance Typeable 'Directory +deriving instance Typeable 'DivideByZero +deriving instance Typeable 'Down +deriving instance Typeable 'Dual +deriving instance Typeable 'EnclosingMark +deriving instance Typeable 'Endo +deriving instance Typeable 'Exception.EOF +deriving instance Typeable 'EQ +deriving instance Typeable 'ErrorOnCodingFailure +deriving instance Typeable 'False +deriving instance Typeable 'FinalQuote +deriving instance Typeable 'First +deriving instance Typeable 'ForceSpecConstr +deriving instance Typeable 'Format +deriving instance Typeable 'GT +deriving instance Typeable 'HardwareFault +deriving instance Typeable 'HeapOverflow +deriving instance Typeable 'IgnoreCodingFailure +deriving instance Typeable 'IllegalOperation +deriving instance Typeable 'InappropriateType +deriving instance Typeable 'Data.Infix +deriving instance Typeable 'InitialQuote +deriving instance Typeable 'InputUnderflow +deriving instance Typeable 'Interrupted +deriving instance Typeable 'InvalidArgument +deriving instance Typeable 'InvalidSequence +deriving instance Typeable 'Just +deriving instance Typeable 'K1 +deriving instance Typeable 'KProxy +deriving instance Typeable 'Last +deriving instance Typeable 'Left +deriving instance Typeable 'LeftAdjust +deriving instance Typeable 'LeftAssociative +deriving instance Typeable 'LetterNumber +deriving instance Typeable 'LF +deriving instance Typeable 'LineSeparator +deriving instance Typeable 'LossOfPrecision +deriving instance Typeable 'LowercaseLetter +deriving instance Typeable 'LT +deriving instance Typeable 'MaskedInterruptible +deriving instance Typeable 'MaskedUninterruptible +deriving instance Typeable 'MathSymbol +deriving instance Typeable 'ModifierLetter +deriving instance Typeable 'ModifierSymbol +deriving instance Typeable 'NestedAtomically +deriving instance Typeable 'NewlineMode +deriving instance Typeable 'NonSpacingMark +deriving instance Typeable 'NonTermination +deriving instance Typeable 'NoSpecConstr +deriving instance Typeable 'NoSuchThing +deriving instance Typeable 'NotAssigned +deriving instance Typeable 'NotAssociative +deriving instance Typeable 'Nothing +deriving instance Typeable 'O +deriving instance Typeable 'OpenPunctuation +deriving instance Typeable 'OtherError +deriving instance Typeable 'OtherLetter +deriving instance Typeable 'OtherNumber +deriving instance Typeable 'OtherPunctuation +deriving instance Typeable 'OtherSymbol +deriving instance Typeable 'OutputUnderflow +deriving instance Typeable 'Overflow +deriving instance Typeable 'Par1 +deriving instance Typeable 'ParagraphSeparator +deriving instance Typeable 'PermissionDenied +deriving instance Typeable 'Data.Prefix +deriving instance Typeable 'PrivateUse +deriving instance Typeable 'Product +deriving instance Typeable 'ProtocolError +deriving instance Typeable 'RatioZeroDenominator +deriving instance Typeable 'RawDevice +deriving instance Typeable 'ReadBuffer +deriving instance Typeable 'ReadHandle +deriving instance Typeable 'ReadMode +deriving instance Typeable 'ReadWriteHandle +deriving instance Typeable 'ReadWriteMode +deriving instance Typeable 'RegularFile +deriving instance Typeable 'RelativeSeek +deriving instance Typeable 'ResourceBusy +deriving instance Typeable 'ResourceExhausted +deriving instance Typeable 'ResourceVanished +deriving instance Typeable 'Right +deriving instance Typeable 'RightAssociative +deriving instance Typeable 'RoundtripFailure +deriving instance Typeable 'SeekFromEnd +deriving instance Typeable 'SemiClosedHandle +deriving instance Typeable 'SignPlus +deriving instance Typeable 'SignSpace +deriving instance Typeable 'Space +deriving instance Typeable 'SpacingCombiningMark +deriving instance Typeable 'SPEC +deriving instance Typeable 'SPEC2 +deriving instance Typeable 'StackOverflow +deriving instance Typeable 'Stream +deriving instance Typeable 'Sum +deriving instance Typeable 'Surrogate +deriving instance Typeable 'SystemError +deriving instance Typeable 'ThreadBlocked +deriving instance Typeable 'ThreadDied +deriving instance Typeable 'ThreadFinished +deriving instance Typeable 'ThreadKilled +deriving instance Typeable 'ThreadRunning +deriving instance Typeable 'TimeExpired +deriving instance Typeable 'TitlecaseLetter +deriving instance Typeable 'TransliterateCodingFailure +deriving instance Typeable 'True +deriving instance Typeable 'U1 +deriving instance Typeable 'Underflow +deriving instance Typeable 'Unmasked +deriving instance Typeable 'UnsatisfiedConstraints +deriving instance Typeable 'UnsupportedOperation +deriving instance Typeable 'UppercaseLetter +deriving instance Typeable 'UserError +deriving instance Typeable 'UserInterrupt +deriving instance Typeable 'WriteBuffer +deriving instance Typeable 'WriteHandle +deriving instance Typeable 'WriteMode +deriving instance Typeable 'ZeroPad +deriving instance Typeable 'ZipList + +# if defined(mingw32_HOST_OS) +deriving instance Typeable 'Break +deriving instance Typeable 'Close +deriving instance Typeable 'ControlC +deriving instance Typeable 'Logoff +deriving instance Typeable 'Shutdown +# endif +# endif + +#endif
+ src/Data/Orphans/Prelude.hs view
@@ -0,0 +1,94 @@+{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-deprecations #-} + +{-| +Exports modules that Data.Orphans needs. Because Data.Orphans uses several modules +that only need to be in scope for certain versions of GHC, exporting all of the modules +separately eliminates the need to use CPP pragmas for GHC-version-specific imports. +This makes it much easier to be -Wall-compliant. + +Note that this module does not export any modules that could introduce name clashes. +-} +module Data.Orphans.Prelude (module OrphansPrelude) where + +import Control.Applicative as OrphansPrelude +import Control.Arrow as OrphansPrelude hiding (loop) +import Control.Category as OrphansPrelude hiding ((.), id) +import Control.Concurrent.QSem as OrphansPrelude +import Control.Monad as OrphansPrelude hiding (mapM, sequence) +import Control.Monad.Fix as OrphansPrelude + +import Data.Bits as OrphansPrelude +import Data.Char as OrphansPrelude +import Data.Complex as OrphansPrelude (Complex(..)) +import Data.Fixed as OrphansPrelude +import Data.Int as OrphansPrelude +import Data.Ix as OrphansPrelude +import Data.List as OrphansPrelude (genericLength) +import Data.Version as OrphansPrelude +import Data.Word as OrphansPrelude + +import Foreign.C.Error as OrphansPrelude +import Foreign.C.Types as OrphansPrelude +import Foreign.Marshal.Pool as OrphansPrelude +import Foreign.Ptr as OrphansPrelude (castPtr) +import Foreign.Storable as OrphansPrelude + +import GHC.Base as OrphansPrelude +import GHC.Conc as OrphansPrelude +import GHC.Desugar as OrphansPrelude (AnnotationWrapper) +import GHC.ForeignPtr as OrphansPrelude +import GHC.IO.Buffer as OrphansPrelude +import GHC.IO.BufferedIO as OrphansPrelude (BufferedIO) +import GHC.IO.Device as OrphansPrelude (IODevice, IODeviceType(..), RawIO) +import GHC.IO.Encoding as OrphansPrelude +import GHC.IO.Handle as OrphansPrelude +import GHC.IO.Handle.Types as OrphansPrelude +import GHC.Real as OrphansPrelude (Ratio(..), (%)) +import GHC.ST as OrphansPrelude + +import Numeric as OrphansPrelude (showHex) + +import System.Console.GetOpt as OrphansPrelude +import System.IO as OrphansPrelude +import System.Posix.Internals as OrphansPrelude +import System.Posix.Types as OrphansPrelude + +import Text.Printf as OrphansPrelude + +import Unsafe.Coerce as OrphansPrelude (unsafeCoerce) + +#if defined(mingw32_HOST_OS) +import GHC.IO.Encoding.CodePage.Table as OrphansPrelude +#endif + +#if MIN_VERSION_base(4,4,0) +import Control.Monad.Zip as OrphansPrelude +import Data.Typeable.Internal as OrphansPrelude +import GHC.Fingerprint as OrphansPrelude +import GHC.IO.Encoding.Failure as OrphansPrelude + +# if !defined(mingw32_HOST_OS) && !defined(__GHCJS__) +import GHC.Event as OrphansPrelude +# endif +#endif + +#if MIN_VERSION_base(4,5,0) +import GHC.Stack as OrphansPrelude +import GHC.Stats as OrphansPrelude +#endif + +#if MIN_VERSION_base(4,6,0) +import GHC.GHCi as OrphansPrelude +import GHC.IP as OrphansPrelude +import GHC.TypeLits as OrphansPrelude +#endif + +#if MIN_VERSION_base(4,7,0) +import Data.Proxy as OrphansPrelude +import Data.Type.Coercion as OrphansPrelude (Coercion, TestCoercion) +import Data.Type.Equality as OrphansPrelude ((:~:), TestEquality) +import Text.Read.Lex as OrphansPrelude (Number) +#else +import Control.Concurrent.SampleVar as OrphansPrelude +#endif
test/Control/Applicative/OrphansSpec.hs view
@@ -1,40 +1,40 @@-module Control.Applicative.OrphansSpec (main, spec) where--import Test.Hspec-import Control.Applicative-import Data.Orphans ()-import Data.Monoid-import Prelude---- simplest one to use-newtype Identity a = Identity { runIdentity :: a }--instance Functor Identity where- fmap f = Identity . f . runIdentity--instance Applicative Identity where- pure = Identity- Identity f <*> x = f <$> x--instance Monad Identity where- return = Identity- m >>= k = k (runIdentity m)--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Monoid (Const a b)" $ do- it "mempty returns an empty const" $- getConst (mempty :: (Const String Int)) `shouldBe` ""- it "mappends const part" $- getConst ((Const "aaa" :: Const String Int) `mappend` (Const "bbb" :: Const String Int))- `shouldBe` "aaabbb"-- describe "Monad (WrappedMonad m)" $- it "allows to use a Monad interface in a WrappedMonad" $- (runIdentity . unwrapMonad- $ (WrapMonad (return 1 :: Identity Int))- >> (WrapMonad (return 2 :: Identity Int)))- `shouldBe` (2::Int)+module Control.Applicative.OrphansSpec (main, spec) where + +import Test.Hspec +import Control.Applicative +import Data.Orphans () +import Data.Monoid +import Prelude + +-- simplest one to use +newtype Identity a = Identity { runIdentity :: a } + +instance Functor Identity where + fmap f = Identity . f . runIdentity + +instance Applicative Identity where + pure = Identity + Identity f <*> x = f <$> x + +instance Monad Identity where + return = Identity + m >>= k = k (runIdentity m) + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Monoid (Const a b)" $ do + it "mempty returns an empty const" $ + getConst (mempty :: (Const String Int)) `shouldBe` "" + it "mappends const part" $ + getConst ((Const "aaa" :: Const String Int) `mappend` (Const "bbb" :: Const String Int)) + `shouldBe` "aaabbb" + + describe "Monad (WrappedMonad m)" $ + it "allows to use a Monad interface in a WrappedMonad" $ + (runIdentity . unwrapMonad + $ (WrapMonad (return 1 :: Identity Int)) + >> (WrapMonad (return 2 :: Identity Int))) + `shouldBe` (2::Int)
test/Control/Exception/OrphansSpec.hs view
@@ -1,17 +1,17 @@-module Control.Exception.OrphansSpec (main, spec) where--import Test.Hspec-import Control.Exception-import Data.Orphans ()--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "ErrorCall" $ do- it "has an Eq instance" $ do- ErrorCall "foo" `shouldBe` ErrorCall "foo"-- it "has an Ord instance" $ do- ErrorCall "foo" `shouldSatisfy` (> ErrorCall "bar")+module Control.Exception.OrphansSpec (main, spec) where + +import Test.Hspec +import Control.Exception +import Data.Orphans () + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "ErrorCall" $ do + it "has an Eq instance" $ do + ErrorCall "foo" `shouldBe` ErrorCall "foo" + + it "has an Ord instance" $ do + ErrorCall "foo" `shouldSatisfy` (> ErrorCall "bar")
test/Data/Bits/OrphansSpec.hs view
@@ -1,25 +1,25 @@-{-# LANGUAGE CPP #-}-module Data.Bits.OrphansSpec (main, spec) where--import Test.Hspec--#if MIN_VERSION_base(4,6,0)-import Data.Bits-import Data.Orphans ()-#endif--main :: IO ()-main = hspec spec--spec :: Spec-spec =-#if MIN_VERSION_base(4,6,0)- describe "Bits Bool instance" $- it "allows bitwise operations on Bools" $ do- True .&. True `shouldBe` True- True .&. False `shouldBe` False- False .&. True `shouldBe` False- False .&. False `shouldBe` False-#else- return ()-#endif+{-# LANGUAGE CPP #-} +module Data.Bits.OrphansSpec (main, spec) where + +import Test.Hspec + +#if MIN_VERSION_base(4,6,0) +import Data.Bits +import Data.Orphans () +#endif + +main :: IO () +main = hspec spec + +spec :: Spec +spec = +#if MIN_VERSION_base(4,6,0) + describe "Bits Bool instance" $ + it "allows bitwise operations on Bools" $ do + True .&. True `shouldBe` True + True .&. False `shouldBe` False + False .&. True `shouldBe` False + False .&. False `shouldBe` False +#else + return () +#endif
test/Data/Foldable/OrphansSpec.hs view
@@ -1,38 +1,38 @@-module Data.Foldable.OrphansSpec (main, spec) where--import Test.Hspec--import Control.Applicative-import Data.Foldable as F-import Data.Monoid-import Data.Orphans ()-import Prelude--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Either Foldable Instance" $ do- it "foldMap returns mempty for a Left value" $- foldMap (`mappend` "+") (Left "abc" :: Either String String) `shouldBe` mempty- it "foldMap returns the result of the function on the Right value" $- foldMap (`mappend` "+") (Right "abc" :: Either String String) `shouldBe` "abc+"-- it "foldr returns the accumulator for a Left value" $- F.foldr mappend "+" (Left "abc" :: Either String String) `shouldBe` "+"- it "foldr returns the result of the function on the Right value and accumulator" $- F.foldr mappend "+" (Right "abc" :: Either String String) `shouldBe` "abc+"-- describe "(,) Foldable Instance" $ do- it "foldMap returns the result of the function applied to the second element" $- foldMap (`mappend` "+") ("xyz","abc") `shouldBe` "abc+"-- it "foldr returns the result of the function on the second element of the tuple and accumulator" $- F.foldr mappend "+" ("xyz","abc") `shouldBe` "abc+"-- describe "Const m Foldable Instance" $ do- it "foldMap always returns mempty" $- foldMap (`mappend` "+") (Const "abc") `shouldBe` ""- it "foldr applies the function to the accumulator and mempty" $ do- F.foldr mappend "+" (Const "abc") `shouldBe` "+"+module Data.Foldable.OrphansSpec (main, spec) where + +import Test.Hspec + +import Control.Applicative +import Data.Foldable as F +import Data.Monoid +import Data.Orphans () +import Prelude + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Either Foldable Instance" $ do + it "foldMap returns mempty for a Left value" $ + foldMap (`mappend` "+") (Left "abc" :: Either String String) `shouldBe` mempty + it "foldMap returns the result of the function on the Right value" $ + foldMap (`mappend` "+") (Right "abc" :: Either String String) `shouldBe` "abc+" + + it "foldr returns the accumulator for a Left value" $ + F.foldr mappend "+" (Left "abc" :: Either String String) `shouldBe` "+" + it "foldr returns the result of the function on the Right value and accumulator" $ + F.foldr mappend "+" (Right "abc" :: Either String String) `shouldBe` "abc+" + + describe "(,) Foldable Instance" $ do + it "foldMap returns the result of the function applied to the second element" $ + foldMap (`mappend` "+") ("xyz","abc") `shouldBe` "abc+" + + it "foldr returns the result of the function on the second element of the tuple and accumulator" $ + F.foldr mappend "+" ("xyz","abc") `shouldBe` "abc+" + + describe "Const m Foldable Instance" $ do + it "foldMap always returns mempty" $ + foldMap (`mappend` "+") (Const "abc") `shouldBe` "" + it "foldr applies the function to the accumulator and mempty" $ do + F.foldr mappend "+" (Const "abc") `shouldBe` "+"
test/Data/Monoid/OrphansSpec.hs view
@@ -1,17 +1,17 @@-module Data.Monoid.OrphansSpec (main, spec) where--import Test.Hspec-import Data.Monoid-import Data.Orphans ()--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Num (Sum a) instance" $- it "allows a Sum value to be created from a number" $- 1 `shouldBe` Sum (1 :: Int)- describe "Num (Product a) instance" $- it "allows a Product value to be created from a number" $- 1 `shouldBe` Product (1 :: Int)+module Data.Monoid.OrphansSpec (main, spec) where + +import Test.Hspec +import Data.Monoid +import Data.Orphans () + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Num (Sum a) instance" $ + it "allows a Sum value to be created from a number" $ + 1 `shouldBe` Sum (1 :: Int) + describe "Num (Product a) instance" $ + it "allows a Product value to be created from a number" $ + 1 `shouldBe` Product (1 :: Int)
test/Data/Traversable/OrphansSpec.hs view
@@ -1,27 +1,27 @@-module Data.Traversable.OrphansSpec (main, spec) where--import Test.Hspec--import Control.Applicative-import Data.Orphans ()-import Data.Traversable-import Prelude--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Either Traversable Instance" $ do- it "traverses a Left value" $- traverse (:[]) (Left 5 :: Either Int String) `shouldBe` [Left 5]- it "traverses a Right Value" $- traverse (:[]) (Right "aaa" :: Either Int String) `shouldBe` [Right "aaa"]-- describe "(,) a Traversable Instance" $ do- it "traverses a (,) a value" $- traverse (:[]) (5::Int,"aaa") `shouldBe` [(5,"aaa")]-- describe "Const m Traversable Instance" $ do- it "traverses a Const a value" $ do- fmap getConst (traverse (:[]) (Const 5 :: Const Int String)) `shouldBe` [5]+module Data.Traversable.OrphansSpec (main, spec) where + +import Test.Hspec + +import Control.Applicative +import Data.Orphans () +import Data.Traversable +import Prelude + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Either Traversable Instance" $ do + it "traverses a Left value" $ + traverse (:[]) (Left 5 :: Either Int String) `shouldBe` [Left 5] + it "traverses a Right Value" $ + traverse (:[]) (Right "aaa" :: Either Int String) `shouldBe` [Right "aaa"] + + describe "(,) a Traversable Instance" $ do + it "traverses a (,) a value" $ + traverse (:[]) (5::Int,"aaa") `shouldBe` [(5,"aaa")] + + describe "Const m Traversable Instance" $ do + it "traverses a Const a value" $ do + fmap getConst (traverse (:[]) (Const 5 :: Const Int String)) `shouldBe` [5]
test/Data/Version/OrphansSpec.hs view
@@ -1,26 +1,26 @@-{-# LANGUAGE CPP #-}-#if MIN_VERSION_base(4,7,0)-{-# LANGUAGE OverloadedLists #-}-#endif-module Data.Version.OrphansSpec (main, spec) where--import Test.Hspec--import Data.Data-import Data.Orphans ()-import Data.Version--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Data Version instance" $- it "allows obtaining a Version constructor" $- dataTypeName (dataTypeOf (Version [1,2,3] [])) `shouldBe` "Data.Version.Version"--#if MIN_VERSION_base(4,7,0)- describe "IsList Version instance" $- it "creates a Version from an Int list" $- [1,2,3] `shouldBe` Version [1,2,3] []-#endif+{-# LANGUAGE CPP #-} +#if MIN_VERSION_base(4,7,0) +{-# LANGUAGE OverloadedLists #-} +#endif +module Data.Version.OrphansSpec (main, spec) where + +import Test.Hspec + +import Data.Data +import Data.Orphans () +import Data.Version + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Data Version instance" $ + it "allows obtaining a Version constructor" $ + dataTypeName (dataTypeOf (Version [1,2,3] [])) `shouldBe` "Data.Version.Version" + +#if MIN_VERSION_base(4,7,0) + describe "IsList Version instance" $ + it "creates a Version from an Int list" $ + [1,2,3] `shouldBe` Version [1,2,3] [] +#endif
test/Foreign/Storable/OrphansSpec.hs view
@@ -1,24 +1,24 @@-module Foreign.Storable.OrphansSpec (main, spec) where--import Test.Hspec-import Data.Complex-import Data.Orphans ()-import Data.Ratio-import Foreign.Storable--main :: IO ()-main = hspec spec--spec :: Spec-spec = do- describe "Storable Complex instance" $ do- it "has twice the sizeOf its realPart" $ do- sizeOf ((1 :: Double) :+ 2) `shouldBe` 2*sizeOf (1 :: Double)- it "has the alignment of its realPart" $ do- alignment ((1 :: Double) :+ 2) `shouldBe` alignment (1 :: Double)-- describe "Storable Ratio instance" $ do- it "has twice the sizeOf its parameterized type" $ do- sizeOf ((1 :: Int) % 2) `shouldBe` 2*sizeOf (1 :: Int)- it "has the alignment of its parameterized type" $ do- alignment ((1 :: Int) % 2) `shouldBe` alignment (1 :: Int)+module Foreign.Storable.OrphansSpec (main, spec) where + +import Test.Hspec +import Data.Complex +import Data.Orphans () +import Data.Ratio +import Foreign.Storable + +main :: IO () +main = hspec spec + +spec :: Spec +spec = do + describe "Storable Complex instance" $ do + it "has twice the sizeOf its realPart" $ do + sizeOf ((1 :: Double) :+ 2) `shouldBe` 2*sizeOf (1 :: Double) + it "has the alignment of its realPart" $ do + alignment ((1 :: Double) :+ 2) `shouldBe` alignment (1 :: Double) + + describe "Storable Ratio instance" $ do + it "has twice the sizeOf its parameterized type" $ do + sizeOf ((1 :: Int) % 2) `shouldBe` 2*sizeOf (1 :: Int) + it "has the alignment of its parameterized type" $ do + alignment ((1 :: Int) % 2) `shouldBe` alignment (1 :: Int)
test/GHC/Fingerprint/OrphansSpec.hs view
@@ -1,29 +1,29 @@-{-# LANGUAGE CPP #-}-module GHC.Fingerprint.OrphansSpec (main, spec) where--import Test.Hspec--#if MIN_VERSION_base(4,4,0)-import Data.Orphans ()-import Data.Word (Word64)-import GHC.Fingerprint.Type-#endif--main :: IO ()-main = hspec spec--spec :: Spec-spec =-#if MIN_VERSION_base(4,4,0)- describe "Fingerprint" $- it "has a Show instance" $ do- let w1, w2 :: Word64- w1 = 0x0123456789abcdef- w2 = 0x42- - f :: Fingerprint- f = Fingerprint w1 w2- show f `shouldBe` "0123456789abcdef0000000000000042"-#else- return ()-#endif+{-# LANGUAGE CPP #-} +module GHC.Fingerprint.OrphansSpec (main, spec) where + +import Test.Hspec + +#if MIN_VERSION_base(4,4,0) +import Data.Orphans () +import Data.Word (Word64) +import GHC.Fingerprint.Type +#endif + +main :: IO () +main = hspec spec + +spec :: Spec +spec = +#if MIN_VERSION_base(4,4,0) + describe "Fingerprint" $ + it "has a Show instance" $ do + let w1, w2 :: Word64 + w1 = 0x0123456789abcdef + w2 = 0x42 + + f :: Fingerprint + f = Fingerprint w1 w2 + show f `shouldBe` "0123456789abcdef0000000000000042" +#else + return () +#endif
test/Spec.hs view
@@ -1,1 +1,1 @@-{-# OPTIONS_GHC -F -pgmF hspec-discover #-}+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
+ test/System/Posix/Types/IntWord.hs view
@@ -0,0 +1,4 @@+module System.Posix.Types.IntWord (module IntWord) where++import Data.Int as IntWord+import Data.Word as IntWord
test/System/Posix/Types/OrphansSpec.hs view
@@ -1,141 +1,149 @@-{-# LANGUAGE CPP #-}-{-# OPTIONS_GHC -fno-warn-deprecations #-}-module System.Posix.Types.OrphansSpec (main, spec) where--import Control.Applicative (liftA2)--import Data.Bits (Bits(..))-import Data.Orphans ()-import Data.Word--import System.Posix.Types--import Test.Hspec-import Test.Hspec.QuickCheck (prop)-import Test.QuickCheck (NonZero(..))--#include "HsBaseConfig.h"--type HDev = HTYPE_DEV_T--main :: IO ()-main = hspec spec--spec :: Spec-spec = describe "CDev" $ do- describe "Bits instance" $ do- prop "implements (.&.)" $- pred2HDevHDev (.&.) (.&.)- prop "implements (.|.)" $- pred2HDevHDev (.|.) (.|.)- prop "implements xor" $- pred2HDevHDev xor xor- prop "implements shift" $- pred2IntHDev shift shift- prop "implements rotate" $- pred2IntHDev rotate rotate- prop "implements setBit" $- pred2IntHDev setBit setBit- prop "implements clearBit" $- pred2IntHDev clearBit clearBit- prop "implements complementBit" $- pred2IntHDev complementBit complementBit- prop "implements testBit" $- pred2IntEq testBit testBit- prop "implements complement" $- pred1HDevHDev complement complement- prop "implements bit" $- pred1IntHDev bit bit- prop "implements bitSize" $- pred1HDevEq bitSize bitSize- prop "implements isSigned" $- pred1HDevEq isSigned isSigned- describe "Bounded instance" $ do- it "implements minBound" $- toInteger (minBound :: CDev) `shouldBe` toInteger (minBound :: HDev)- it "implements maxBound" $- toInteger (maxBound :: CDev) `shouldBe` toInteger (maxBound :: HDev)- describe "Integral instance" $ do- prop "implements quot" $- pred2HDevHDev quot quot- prop "implements rem" $- pred2HDevHDev rem rem- prop "implements div" $- pred2HDevHDev div div- prop "implements mod" $- pred2HDevHDev mod mod- prop "implements quotRem" $- pred2HDevPair quotRem quotRem- prop "implements divMod" $- pred2HDevPair divMod divMod- prop "implements toInteger" $- pred1HDevEq toInteger toInteger--eqCDevHDev :: CDev -> HDev -> Bool-eqCDevHDev cDev hDev = toInteger cDev == toInteger hDev--pred1Common :: (b -> c -> d)- -> (a -> b)- -> (a -> c)- -> a -> d-pred1Common = liftA2--pred1HDev :: (b -> c -> Bool)- -> (CDev -> b)- -> (HDev -> c)- -> HDev -> Bool-pred1HDev p f = pred1Common p (f . fromIntegral)--pred1HDevEq :: Eq a => (CDev -> a) -> (HDev -> a) -> HDev -> Bool-pred1HDevEq = pred1HDev (==)--pred1HDevHDev :: (CDev -> CDev) -> (HDev -> HDev) -> HDev -> Bool-pred1HDevHDev = pred1HDev eqCDevHDev--pred1IntHDev :: (Int -> CDev) -> (Int -> HDev) -> Int -> Bool-pred1IntHDev = pred1Common eqCDevHDev--pred2Common :: (c -> d -> e)- -> (a -> b -> c)- -> (a -> b -> d)- -> a -> b -> e-pred2Common p f g x y = p (f x y) (g x y)--pred2HDev :: (a -> b -> Bool)- -> (CDev -> CDev -> a)- -> (HDev -> HDev -> b)- -> NonZero HDev -> NonZero HDev -> Bool-pred2HDev eqv cDevPred hDevPred =- pred2Common eqv (\nz1 nz2 -> cDevPred (fromIntegral $ getNonZero nz1)- (fromIntegral $ getNonZero nz2))- (\nz1 nz2 -> hDevPred (getNonZero nz1)- (getNonZero nz2))--pred2HDevHDev :: (CDev -> CDev -> CDev)- -> (HDev -> HDev -> HDev)- -> NonZero HDev -> NonZero HDev -> Bool-pred2HDevHDev = pred2HDev eqCDevHDev--pred2HDevPair :: (CDev -> CDev -> (CDev, CDev))- -> (HDev -> HDev -> (HDev, HDev))- -> NonZero HDev -> NonZero HDev -> Bool-pred2HDevPair = pred2HDev $ \(cDev1, cDev2) (hDev1, hDev2) ->- toInteger cDev1 == toInteger hDev1- && toInteger cDev2 == toInteger hDev2--pred2Int :: (a -> b -> Bool)- -> (CDev -> Int -> a)- -> (HDev -> Int -> b)- -> HDev -> Int -> Bool-pred2Int eqv cDevPred = pred2Common eqv (cDevPred . fromIntegral)--pred2IntHDev :: (CDev -> Int -> CDev)- -> (HDev -> Int -> HDev)- -> HDev -> Int -> Bool-pred2IntHDev = pred2Int eqCDevHDev--pred2IntEq :: Eq a- => (CDev -> Int -> a)- -> (HDev -> Int -> a)- -> HDev -> Int -> Bool-pred2IntEq = pred2Int (==)+{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-deprecations #-} +module System.Posix.Types.OrphansSpec (main, spec) where + +#include "HsBaseConfig.h" + +import Test.Hspec + +#if defined(HTYPE_DEV_T) +import Control.Applicative (liftA2) + +import Data.Bits (Bits(..)) +import Data.Orphans () + +import System.Posix.Types.IntWord +import System.Posix.Types + +import Test.Hspec.QuickCheck (prop) +import Test.QuickCheck (NonZero(..)) +#endif + +main :: IO () +main = hspec spec + +#if defined(HTYPE_DEV_T) +type HDev = HTYPE_DEV_T + +spec :: Spec +spec = describe "CDev" $ do + describe "Bits instance" $ do + prop "implements (.&.)" $ + pred2HDevHDev (.&.) (.&.) + prop "implements (.|.)" $ + pred2HDevHDev (.|.) (.|.) + prop "implements xor" $ + pred2HDevHDev xor xor + prop "implements shift" $ + pred2IntHDev shift shift + prop "implements rotate" $ + pred2IntHDev rotate rotate + prop "implements setBit" $ + pred2IntHDev setBit setBit + prop "implements clearBit" $ + pred2IntHDev clearBit clearBit + prop "implements complementBit" $ + pred2IntHDev complementBit complementBit + prop "implements testBit" $ + pred2IntEq testBit testBit + prop "implements complement" $ + pred1HDevHDev complement complement + prop "implements bit" $ + pred1IntHDev bit bit + prop "implements bitSize" $ + pred1HDevEq bitSize bitSize + prop "implements isSigned" $ + pred1HDevEq isSigned isSigned + describe "Bounded instance" $ do + it "implements minBound" $ + toInteger (minBound :: CDev) `shouldBe` toInteger (minBound :: HDev) + it "implements maxBound" $ + toInteger (maxBound :: CDev) `shouldBe` toInteger (maxBound :: HDev) + describe "Integral instance" $ do + prop "implements quot" $ + pred2HDevHDev quot quot + prop "implements rem" $ + pred2HDevHDev rem rem + prop "implements div" $ + pred2HDevHDev div div + prop "implements mod" $ + pred2HDevHDev mod mod + prop "implements quotRem" $ + pred2HDevPair quotRem quotRem + prop "implements divMod" $ + pred2HDevPair divMod divMod + prop "implements toInteger" $ + pred1HDevEq toInteger toInteger + +eqCDevHDev :: CDev -> HDev -> Bool +eqCDevHDev cDev hDev = toInteger cDev == toInteger hDev + +pred1Common :: (b -> c -> d) + -> (a -> b) + -> (a -> c) + -> a -> d +pred1Common = liftA2 + +pred1HDev :: (b -> c -> Bool) + -> (CDev -> b) + -> (HDev -> c) + -> HDev -> Bool +pred1HDev p f = pred1Common p (f . fromIntegral) + +pred1HDevEq :: Eq a => (CDev -> a) -> (HDev -> a) -> HDev -> Bool +pred1HDevEq = pred1HDev (==) + +pred1HDevHDev :: (CDev -> CDev) -> (HDev -> HDev) -> HDev -> Bool +pred1HDevHDev = pred1HDev eqCDevHDev + +pred1IntHDev :: (Int -> CDev) -> (Int -> HDev) -> Int -> Bool +pred1IntHDev = pred1Common eqCDevHDev + +pred2Common :: (c -> d -> e) + -> (a -> b -> c) + -> (a -> b -> d) + -> a -> b -> e +pred2Common p f g x y = p (f x y) (g x y) + +pred2HDev :: (a -> b -> Bool) + -> (CDev -> CDev -> a) + -> (HDev -> HDev -> b) + -> NonZero HDev -> NonZero HDev -> Bool +pred2HDev eqv cDevPred hDevPred = + pred2Common eqv (\nz1 nz2 -> cDevPred (fromIntegral $ getNonZero nz1) + (fromIntegral $ getNonZero nz2)) + (\nz1 nz2 -> hDevPred (getNonZero nz1) + (getNonZero nz2)) + +pred2HDevHDev :: (CDev -> CDev -> CDev) + -> (HDev -> HDev -> HDev) + -> NonZero HDev -> NonZero HDev -> Bool +pred2HDevHDev = pred2HDev eqCDevHDev + +pred2HDevPair :: (CDev -> CDev -> (CDev, CDev)) + -> (HDev -> HDev -> (HDev, HDev)) + -> NonZero HDev -> NonZero HDev -> Bool +pred2HDevPair = pred2HDev $ \(cDev1, cDev2) (hDev1, hDev2) -> + toInteger cDev1 == toInteger hDev1 + && toInteger cDev2 == toInteger hDev2 + +pred2Int :: (a -> b -> Bool) + -> (CDev -> Int -> a) + -> (HDev -> Int -> b) + -> HDev -> Int -> Bool +pred2Int eqv cDevPred = pred2Common eqv (cDevPred . fromIntegral) + +pred2IntHDev :: (CDev -> Int -> CDev) + -> (HDev -> Int -> HDev) + -> HDev -> Int -> Bool +pred2IntHDev = pred2Int eqCDevHDev + +pred2IntEq :: Eq a + => (CDev -> Int -> a) + -> (HDev -> Int -> a) + -> HDev -> Int -> Bool +pred2IntEq = pred2Int (==) +#else +spec :: Spec +spec = return () +#endif