packages feed

tagged-exception-core 2.1.0.0 → 2.2.0.0

raw patch · 10 files changed

+338/−193 lines, 10 filesdep +ghc-primPVP ok

version bump matches the API change (PVP)

Dependencies added: ghc-prim

API changes (from Hackage documentation)

+ Control.Monad.TaggedException.Core: bracket :: (Exception e, MonadMask m) => m a -> (a -> m b) -> (a -> Throws e m c) -> Throws e m c
+ Control.Monad.TaggedException.Core: bracket' :: MonadMask m => m a -> (a -> m b) -> (a -> m c) -> m c
+ Control.Monad.TaggedException.Core: bracketOnError :: (Exception e, MonadMask m) => m a -> (a -> m b) -> (a -> Throws e m c) -> Throws e m c
+ Control.Monad.TaggedException.Core: bracketOnError' :: MonadMask m => m a -> (a -> m b) -> (a -> m c) -> m c
+ Control.Monad.TaggedException.Core: bracket_ :: (Exception e, MonadMask m) => m a -> m b -> Throws e m c -> Throws e m c
+ Control.Monad.TaggedException.Core: finally :: (Exception e, MonadMask m) => Throws e m a -> m b -> Throws e m a
+ Control.Monad.TaggedException.Core: finally' :: MonadMask m => m a -> m b -> m a
+ Control.Monad.TaggedException.Hidden: instance Control.Monad.TaggedException.Hidden.HiddenException Data.Void.Void
+ Control.Monad.TaggedException.Hidden: instance Control.Monad.TaggedException.Hidden.HiddenException GHC.IO.Exception.AllocationLimitExceeded
+ Control.Monad.TaggedException.Internal.Throws: instance forall (k :: BOX) (e :: k) (m :: * -> *). GHC.Generics.Generic1 (Control.Monad.TaggedException.Internal.Throws.Throws e m)

Files

ChangeLog.md view
@@ -1,17 +1,39 @@ # ChangeLog / ReleaseNotes  +## Version 2.2.0.0++* Deprecating module `Control.Monad.TaggedException.Utilities`, definitions+  from it were moved in to `Control.Monad.TaggedException.Core`. (**change**)+* Type `Throws` has now instance for `Generic1`, but only on GHC >=7.10, due to+  `PolyKinds`. (**new**)+* `HiddenException` instances for `AllocationLimitExceeded` and `Void`, both+  defined in base >=4.8. (**new**)+* `HiddenException` instance for `TypeError`, defined in base >=4.9. (**new**)+* Bumped upper bound of [transformers][] package to include 0.5.\* branch.+  (**change**)+++## Version 2.1.0.1++* Relaxing upper bound on [exceptions][] package to include versions up to+  0.8.\*. (**new**)+* Not uploaded on to [Hackage][], instead opted to modify package metadata of+  [2.1.0.0](http://hackage.haskell.org/package/tagged-exception-core-2.1.0.0)+  release.++ ## Version 2.1.0.0 -* Builds on GHC from 7.4 to 7.10, later with base 4.8. (change)-* Bumping transformers bounds to include 0.4.\* versions. (change)+* Builds on GHC from 7.4 to 7.10, later with base 4.8. (**change**)+* Bumping [transformers][] bounds to include 0.4.\* versions. (**change**) * Dropped last threads of support for base <= 4.5; it hadn't worked anyway   since [exceptions][] ==0.6 depend on base >=4.5 && <5. (breaking change) * Instances for [mtl][] >=2.1 package. Package [exceptions][] already depends-  on [mtl][], so it doesn't make sense to shy away from them. (new)-* Introduced unsafe functions (new):+  on [mtl][], so it doesn't make sense to shy away from them. (**new**)+* Introduced unsafe functions (**new**): -    ````Haskell+    ```Haskell     liftCCLike         :: (((a -> m b) -> m' c) -> m'' d)         -> ((a -> Throws e m b) -> Throws e m' c) -> Throws e m'' d@@ -25,13 +47,14 @@         -> Throws e m b -> Throws e' n b     ``` -* Documentation updates. (new)+* Documentation updates. (**new**) * Uploaded to [Hackage][]:   <http://hackage.haskell.org/package/tagged-exception-core-2.1.0.0>   ## Version 2.0.0.0 +* First public release. * Rewritten to use classes from [exceptions][] package. * Uploaded to [Hackage][]:   <http://hackage.haskell.org/package/tagged-exception-core-2.0.0.0>@@ -47,3 +70,6 @@ [mtl]:   http://hackage.haskell.org/package/mtl   "mtl package on Hackage"+[transformers]:+  http://hackage.haskell.org/package/transformers+  "transformers package on Hackage"
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2009-2015, Peter Trško+Copyright (c) 2009-2016, Peter Trško  All rights reserved. 
README.md view
@@ -1,6 +1,7 @@ # Tagged Exception Core  [![Hackage](http://img.shields.io/hackage/v/tagged-exception-core.svg)][Hackage: tagged-exception-core]+[![Hackage Dependencies](https://img.shields.io/hackage-deps/v/tagged-exception-core.svg)](http://packdeps.haskellers.com/reverse/tagged-exception-core) [![Haskell Programming Language](https://img.shields.io/badge/language-Haskell-blue.svg)][Haskell.org] [![BSD3 License](http://img.shields.io/badge/license-BSD3-brightgreen.svg)][tl;dr Legal: BSD3] @@ -13,13 +14,60 @@ others may build on top of it.  +## Usage Example +Example of reflecting reised exception in type:++```Haskell+{-# LANGUAGE DeriveDataTypeable #-}++import Control.Exception (Exception)++import Control.Monad.TaggedException (Throws)+import qualified Control.Monad.TaggedException as E (liftT, throw)+import Data.Typeable (Typeable)+++data NotReady = NotReady String+    deriving (Show, Typeable)+        -- Both required by Exception class++instance Exception NotReady++myFunction :: Input -> Throws NotReady IO Output+myFunction input = do++    -- ... some stuff ...++    -- isReady :: Input -> IO Bool+    ready <- E.liftT $ isReady input+    unless ready+        . E.throw $ NotReady "Resource of myFunction is not ready."++    -- ... some other stuff ...+```++## License++The BSD 3-Clause License, see [LICENSE][] file for details.+++## Contributions++Contributions, pull requests and bug reports are welcome! Please don't be+afraid to contact author using GitHub or by e-mail.+++ [Hackage: tagged-exception-core]:   http://hackage.haskell.org/package/tagged-exception-core   "tagged-exception-core package on Hackage" [Haskell.org]:   http://www.haskell.org   "The Haskell Programming Language"+[LICENSE]:+  https://github.com/trskop/tagged-exception-core/blob/master/LICENSE+  "License of endo package." [tl;dr Legal: BSD3]:   https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29   "BSD 3-Clause License (Revised)"
src/Control/Monad/TaggedException.hs view
@@ -2,7 +2,7 @@ {-# OPTIONS_GHC -fno-warn-missing-import-lists #-} -- | -- Module:       $HEADER$--- Copyright:    (c) 2009-2015 Peter Trško+-- Copyright:    (c) 2009-2015, Peter Trško -- License:      BSD3 -- -- Stability:    provisional@@ -232,7 +232,11 @@     , module Control.Monad.TaggedException.Hidden      -- ** Asynchronous exceptions and bracket family of functions-    , module Control.Monad.TaggedException.Utilities+    --+    -- | These functions are exported as part of+    -- "Control.Monad.TaggedException.Core" module, there is also module+    -- "Control.Monad.TaggedException.Utilities", which reexports only+    -- functions that make use of 'Control.Monad.Catch.MonadMask' type class.      -- * Some related work     --@@ -271,7 +275,6 @@  import Control.Monad.TaggedException.Core import Control.Monad.TaggedException.Hidden-import Control.Monad.TaggedException.Utilities  -- $usage --
src/Control/Monad/TaggedException/Core.hs view
@@ -1,8 +1,9 @@ {-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE RankNTypes #-} -- | -- Module:       $HEADER$ -- Description:  Core functionality.--- Copyright:    (c) 2009-2015 Peter Trško+-- Copyright:    (c) 2009-2016, Peter Trško -- License:      BSD3 -- -- Stability:    provisional@@ -24,6 +25,15 @@     , onException     , onException' +    -- * Utilities+    , bracket+    , bracket'+    , bracket_+    , bracketOnError+    , bracketOnError'+    , finally+    , finally'+     -- * Exception tag     , Throws @@ -47,11 +57,12 @@     where  import Control.Exception (Exception)+import Control.Monad (Monad(return)) import Data.Either (Either)-import Data.Function ((.), flip)+import Data.Function ((.), ($), const, flip) import Data.Functor (Functor) -import Control.Monad.Catch (MonadCatch, MonadThrow)+import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow) import qualified Control.Monad.Catch as Exceptions  import Control.Monad.TaggedException.Internal.Throws (Throws(Throws))@@ -65,6 +76,7 @@     , insideTf2     , joinT     , joinT3+    , liftMask     , liftT1     , liftT2     , liftT3@@ -441,7 +453,7 @@  -- | ----- Since @1.2.0.0@+-- /Since 1.2.0.0/ embedT :: (Exception e, MonadThrow m, MonadThrow m')     => (m a -> Throws e m' b)     -> Throws e m a -> Throws e m' b@@ -449,3 +461,165 @@ {-# INLINE embedT #-}  -- }}} Exception tag -- Combinators -------------------------------------------++-- {{{ Utilities --------------------------------------------------------------++mask' :: MonadMask m => ((forall a. m a -> m a) -> m b) -> m b+mask' = Exceptions.mask++mask+    :: (Exception e, MonadMask m)+    => ((forall a. Throws e m a -> Throws e m a) -> Throws e m b)+    -> Throws e m b+mask = Unsafe.liftMask Exceptions.mask++-- | Run computation afeter another even if exception was thrown. See also+-- 'finally'', 'onException' and 'onException''.+--+-- Implemented as:+--+-- @+-- m ``finally`` n = 'mask' $ \\restore -> do+--     r <- restore m ``onException`` n+--     _ <- 'liftT' n+--     return r+-- @+finally+    :: (Exception e, MonadMask m)+    => Throws e m a+    -- ^ Computation to run first+    -> m b+    -- ^ Computation to run afterward (even if exception @e@ was raised)+    -> Throws e m a+    -- ^ Returns the result of the first computation+m `finally` n = mask $ \restore -> do+    r <- restore m `onException` n+    _ <- liftT n+    return r++-- | Run computation afeter another even if exception was thrown. See also+-- 'finally', 'onException' and 'onException''.+finally'+    :: MonadMask m+    => m a+    -- ^ Computation to run first+    -> m b+    -- ^ Computation to run afterward (even if some exception was raised)+    -> m a+    -- ^ Returns the result of the first computation+finally' = Exceptions.finally++-- | Run computation surrounded by acquire and release computations. The+-- release computation is executed even if \"in-between\" computation+-- raises exception. See also 'bracket'', 'bracket_', 'bracketOnError',+-- and 'bracketOnError''.+bracket+    :: (Exception e, MonadMask m)+    => m a+    -- ^ Computation to run before+    -> (a -> m b)+    -- ^ Computation to run after+    -> (a -> Throws e m c)+    -- ^ Computation to run in-between+    -> Throws e m c+    -- ^ Result of the in-between computation+bracket acq rel go = mask $ \ restore -> do+    x <- liftT acq+    r <- restore (go x) `onException` rel x+    _ <- liftT $ rel x+    return r++-- | Run computation surrounded by acquire and release computations. The+-- release computation is executed even if \"in-between\" computation+-- raises exception. See also 'bracket', 'bracket_', 'bracketOnError', and+-- 'bracketOnError''.+--+-- Implementated as:+--+-- @+-- 'bracket'' acq rel go = 'mask'' $ \\restore -> do+--     x <- acq+--     r <- restore (go x) ``onException'`` rel x+--     _ <- rel x+--     return r+-- @+bracket'+    :: MonadMask m+    => m a+    -- ^ Computation to run before+    -> (a -> m b)+    -- ^ Computation to run after+    -> (a -> m c)+    -- ^ Computation to run in-between+    -> m c+    -- ^ Result of the in-between computation+bracket' = Exceptions.bracket++-- | Version of 'bracket' where \"after\" computation is executed only if+-- \"in-between\" computation raises exception.+--+-- Implemented as:+--+-- @+-- 'bracketOnError' acq rel go = 'mask' $ \\restore -> do+--     x <- 'liftT' acq+--     restore (go x) ``onException`` rel x+-- @+bracketOnError+    :: (Exception e, MonadMask m)+    => m a+    -- ^ Computation to run before+    -> (a -> m b)+    -- ^ Computation to run after if an exception was raised+    -> (a -> Throws e m c)+    -- ^ Computation to run in-between+    -> Throws e m c+    -- ^ Result of the in-between computation+bracketOnError acq rel go = mask $ \ restore -> do+    x <- liftT acq+    restore (go x) `onException` rel x++-- | Version of 'bracket' where \"after\" computation is executed only if+-- \"in-between\" computation raises exception.+--+-- Implemented as:+--+-- @+-- 'bracketOnError'' acq rel go = 'mask'' $ \\restore -> do+--     x <- 'liftT' acq+--     restore (go x) ``onException'`` rel x+-- @+bracketOnError'+    :: MonadMask m+    => m a+    -- ^ Computation to run before+    -> (a -> m b)+    -- ^ Computation to run after if an exception was raised+    -> (a -> m c)+    -- ^ Computation to run in-between+    -> m c+    -- ^ Result of the in-between computation+bracketOnError' acq rel go = mask' $ \ restore -> do+    x <- acq+    restore (go x) `onException'` rel x++-- | Variant of 'bracket'.+--+-- Implemented as:+--+-- @+-- 'bracket_' acq rel go = 'bracket' acq ('const' rel) ('const' go)+-- @+bracket_+    :: (Exception e, MonadMask m)+    => m a+    -- ^ Computation to run before+    -> m b+    -- ^ Computation to run after+    -> Throws e m c+    -- ^ Computation to run in-between+    -> Throws e m c+    -- ^ Result of the in-between computation+bracket_ acq rel go = bracket acq (const rel) (const go)++-- }}} Utilities --------------------------------------------------------------
src/Control/Monad/TaggedException/Hidden.hs view
@@ -3,7 +3,7 @@ -- | -- Module:       $HEADER$ -- Description:  Support for hidden exceptions.--- Copyright:    (c) 2009 - 2014 Peter Trsko+-- Copyright:    (c) 2009-2016, Peter Trško -- License:      BSD3 -- -- Stability:    provisional@@ -65,7 +65,12 @@  import Control.Exception (Exception) import qualified Control.Exception as E+#if MIN_VERSION_base(4,8,0)+    ( AllocationLimitExceeded+    , ArithException+#else     ( ArithException+#endif     , ArrayException     , AssertionFailed     , AsyncException@@ -90,9 +95,15 @@     , SomeAsyncException #endif     , SomeException+#if MIN_VERSION_base(4,9,0)+    , TypeError+#endif     ) import Data.Dynamic (Dynamic) import Data.Function ((.))+#if MIN_VERSION_base(4,8,0)+import Data.Void (Void)+#endif import System.Exit (ExitCode)  import Control.Monad.Catch (MonadCatch, MonadThrow)@@ -136,11 +147,21 @@ instance HiddenException E.RecConError instance HiddenException E.RecSelError instance HiddenException E.RecUpdError+instance HiddenException E.SomeException+instance HiddenException ExitCode+ #if MIN_VERSION_base(4,7,0) instance HiddenException E.SomeAsyncException #endif-instance HiddenException E.SomeException-instance HiddenException ExitCode++#if MIN_VERSION_base(4,8,0)+instance HiddenException E.AllocationLimitExceeded+instance HiddenException Void+#endif++#if MIN_VERSION_base(4,9,0)+instance HiddenException E.TypeError+#endif  -- }}} HiddenException -- Instances ------------------------------------------- 
src/Control/Monad/TaggedException/Internal/Throws.hs view
@@ -19,7 +19,7 @@ -- | -- Module:       $HEADER$ -- Description:  Data type for associating monadic value with phantom type.--- Copyright:    (c) 2009 - 2015 Peter Trsko+-- Copyright:    (c) 2009-2016, Peter Trško -- License:      BSD3 -- -- Maintainer:   peter.trsko@gmail.com@@ -56,8 +56,13 @@ import Data.Typeable (Typeable) #endif #ifdef GHC_GENERICS-import GHC.Generics (Generic)+import GHC.Generics+    ( Generic+#if __GLASGOW_HASKELL__ >= 710+    , Generic1 #endif+    )+#endif  import Control.Monad.Cont.Class (MonadCont(callCC)) import Control.Monad.Error.Class (MonadError(catchError, throwError))@@ -85,6 +90,9 @@     -- GHC Generics were introduced earlier then polykinded Typeable.   deriving     ( Generic+#if __GLASGOW_HASKELL__ >= 710+    , Generic1+#endif #ifdef KIND_POLYMORPHIC_TYPEABLE     , Typeable #endif
src/Control/Monad/TaggedException/Unsafe.hs view
@@ -3,7 +3,7 @@ -- Module:       $HEADER$ -- Description:  Unsafe exception tag cobinators and specific lifting --               functions.--- Copyright:    (c) 2009-2015 Peter Trsko+-- Copyright:    (c) 2009-2015, Peter Trško -- License:      BSD3 -- -- Stability:    provisional
src/Control/Monad/TaggedException/Utilities.hs view
@@ -3,16 +3,23 @@ -- | -- Module:       $HEADER$ -- Description:  Utility functions built on top of core API.--- Copyright:    (c) 2009-2014 Peter Trsko.+-- Copyright:    (c) 2009-2015, Peter Trško -- License:      BSD3 -- -- Stability:    provisional -- Portability:  NoImplicitPrelude, RankNTypes -- -- Utility functions built on top of core API.+--+-- Functions from this module were moved in to+-- "Control.Monad.TaggedException.Core", and this module became deprecated.+--+-- For compatibility reasons this module re-exports all functions that were+-- previously defined here, but this module will be removed in the future.+-- Please update your code to use "Control.Monad.TaggedException.Core" instead. module Control.Monad.TaggedException.Utilities-    (-      bracket+    {-# DEPRECATED "Use module Control.Monad.TaggedException.Core instead." #-}+    ( bracket     , bracket'     , bracket_     , bracketOnError@@ -20,167 +27,14 @@     , finally     , finally'     )-    where--import Control.Monad (Monad(return))-import Control.Exception (Exception)-import Data.Function (($), const)--import Control.Monad.Catch (MonadMask)-import qualified Control.Monad.Catch as Exceptions+  where  import Control.Monad.TaggedException.Core-    ( liftT-    , onException-    , onException'+    ( bracket+    , bracket'+    , bracket_+    , bracketOnError+    , bracketOnError'+    , finally+    , finally'     )-import Control.Monad.TaggedException.Internal.Throws (Throws)-import qualified Control.Monad.TaggedException.Internal.Throws-    as Unsafe (liftMask)---mask' :: MonadMask m => ((forall a. m a -> m a) -> m b) -> m b-mask' = Exceptions.mask--mask-    :: (Exception e, MonadMask m)-    => ((forall a. Throws e m a -> Throws e m a) -> Throws e m b)-    -> Throws e m b-mask = Unsafe.liftMask Exceptions.mask---- | Run computation afeter another even if exception was thrown. See also--- 'finally'', 'onException' and 'onException''.------ Default implementation:------ > m `finally` n = mask $ \ restore -> do--- >     r <- restore m `onException` n--- >     _ <- liftT n--- >     return r-finally-    :: (Exception e, MonadMask m)-    => Throws e m a-    -- ^ Computation to run first-    -> m b-    -- ^ Computation to run afterward (even if exception @e@ was raised)-    -> Throws e m a-    -- ^ Returns the result of the first computation-m `finally` n = mask $ \restore -> do-    r <- restore m `onException` n-    _ <- liftT n-    return r---- | Run computation afeter another even if exception was thrown. See also--- 'finally', 'onException' and 'onException''.-finally'-    :: MonadMask m-    => m a-    -- ^ Computation to run first-    -> m b-    -- ^ Computation to run afterward (even if some exception was raised)-    -> m a-    -- ^ Returns the result of the first computation-finally' = Exceptions.finally---- | Run computation surrounded by acquire and release computations. The--- release computation is executed even if \"in-between\" computation--- raises exception. See also 'bracket'', 'bracket_', 'bracketOnError',--- and 'bracketOnError''.-bracket-    :: (Exception e, MonadMask m)-    => m a-    -- ^ Computation to run before-    -> (a -> m b)-    -- ^ Computation to run after-    -> (a -> Throws e m c)-    -- ^ Computation to run in-between-    -> Throws e m c-    -- ^ Result of the in-between computation-bracket acq rel go = mask $ \ restore -> do-    x <- liftT acq-    r <- restore (go x) `onException` rel x-    _ <- liftT $ rel x-    return r---- | Run computation surrounded by acquire and release computations. The--- release computation is executed even if \"in-between\" computation--- raises exception. See also 'bracket', 'bracket_', 'bracketOnError', and--- 'bracketOnError''.------ Default implementation:------ > bracket' acq rel go = mask' $ \ restore -> do--- >     x <- acq--- >     r <- restore (go x) `onException'` rel x--- >     _ <- rel x--- >     return r-bracket'-    :: MonadMask m-    => m a-    -- ^ Computation to run before-    -> (a -> m b)-    -- ^ Computation to run after-    -> (a -> m c)-    -- ^ Computation to run in-between-    -> m c-    -- ^ Result of the in-between computation-bracket' = Exceptions.bracket---- | Version of 'bracket' where \"after\" computation is executed only if--- \"in-between\" computation raises exception.------ Default implementation:------ > bracketOnError acq rel go = mask $ \ restore -> do--- >     x <- liftT acq--- >     restore (go x) `onException` rel x-bracketOnError-    :: (Exception e, MonadMask m)-    => m a-    -- ^ Computation to run before-    -> (a -> m b)-    -- ^ Computation to run after if an exception was raised-    -> (a -> Throws e m c)-    -- ^ Computation to run in-between-    -> Throws e m c-    -- ^ Result of the in-between computation-bracketOnError acq rel go = mask $ \ restore -> do-    x <- liftT acq-    restore (go x) `onException` rel x---- | Version of 'bracket' where \"after\" computation is executed only if--- \"in-between\" computation raises exception.------ Default implementation:------ > bracketOnError' acq rel go = mask' $ \ restore -> do--- >     x <- liftT acq--- >     restore (go x) `onException'` rel x-bracketOnError'-    :: MonadMask m-    => m a-    -- ^ Computation to run before-    -> (a -> m b)-    -- ^ Computation to run after if an exception was raised-    -> (a -> m c)-    -- ^ Computation to run in-between-    -> m c-    -- ^ Result of the in-between computation-bracketOnError' acq rel go = mask' $ \ restore -> do-    x <- acq-    restore (go x) `onException'` rel x---- | Variant of 'bracket'.------ > bracket_ acq rel go = bracket acq (const rel) (const go)-bracket_-    :: (Exception e, MonadMask m)-    => m a-    -- ^ Computation to run before-    -> m b-    -- ^ Computation to run after-    -> Throws e m c-    -- ^ Computation to run in-between-    -> Throws e m c-    -- ^ Result of the in-between computation-bracket_ acq rel go = bracket acq (const rel) (const go)
tagged-exception-core.cabal view
@@ -1,5 +1,5 @@ Name:               tagged-exception-core-Version:            2.1.0.0+Version:            2.2.0.0  Synopsis:           Reflect exceptions using phantom types. Description:@@ -7,9 +7,10 @@   introduces @Throws@ monad transformer that uses phantom type to tag code that   may raise exception.  Intention is to make exceptions explicit and to enforce   exception handling.-Homepage:           https://github.com/trskop/tagged-exception-Bug-reports:        https://github.com/trskop/tagged-exception/issues-Copyright:          Copyright (c) 2009-2015, Peter Trško++Homepage:           https://github.com/trskop/tagged-exception-core+Bug-reports:        https://github.com/trskop/tagged-exception-core/issues+Copyright:          Copyright (c) 2009-2016, Peter Trško License:            BSD3 License-file:       LICENSE Author:             Peter Trško@@ -60,18 +61,26 @@    Build-depends:     -- {{{ Distributed with GHC or Haskell Platform ---------------------------+       base >= 4.5 && < 5     -- ^ Same restrictions as exceptions 0.6 have.-    , transformers >= 0.3 && < 0.5++    , transformers >= 0.3 && < 0.6     -- ^ Based on dependencies of mtl==2.1 and mtl==2.2.1+     -- }}} Distributed with GHC or Haskell Platform --------------------------- -    , exceptions > 0.6 && < 0.7+    , exceptions > 0.6 && < 0.9     -- ^ Interface of this package changed a lot between minor versions,     -- therefore trying conservative approach. Dependency introduced in     -- tagged-exception-core-2.0.0.0.+    --+    -- From the used API view, there has been little changes between 0.6.1 and+    -- 0.8.2.1 (newest at the time of writing).+     , mmorph >= 1.0.0 && < 1.1     -- ^ Dependency introduced in tagged-exception-core-1.2.0.0.+     , mtl >=2.1 && <2.3     -- ^ Dependency introduced in tagged-exception-core-2.0.1.0.     -- Package exceptions already depends on it so it doesn't make sense to@@ -80,8 +89,10 @@   if impl(ghc >= 7.8.1)     CPP-options:    -DKIND_POLYMORPHIC_TYPEABLE -  if impl(ghc >= 7.6.1)-    CPP-options:    -DGHC_GENERICS+  CPP-options:      -DGHC_GENERICS+  if impl(ghc < 7.6)+    -- GHC.Generics moved from ghc-prim to base with GHC 7.6 release.+    Build-depends:  ghc-prim    GHC-options:      -Wall   if flag(pedantic)@@ -98,4 +109,4 @@ source-repository this   type:             git   location:         git://github.com/trskop/tagged-exception-core.git-  tag:              2.1.0.0+  tag:              2.2.0.0