collect-errors 0.1.1.0 → 0.1.2.0
raw patch · 6 files changed
+62/−15 lines, 6 filesdep +deepseqPVP ok
version bump matches the API change (PVP)
Dependencies added: deepseq
API changes (from Hackage documentation)
+ Control.CollectErrors: class CanTakeErrors es t
+ Control.CollectErrors: liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2
+ Control.CollectErrors: takeErrors :: CanTakeErrors es t => es -> t -> t
+ Control.CollectErrors: takeErrorsNoValue :: CanTakeErrors es t => es -> t
+ Control.CollectErrors.Type: class CanTakeErrors es t
+ Control.CollectErrors.Type: instance (Control.CollectErrors.Type.CanTakeErrors es t1, Control.CollectErrors.Type.CanTakeErrors es t2) => Control.CollectErrors.Type.CanTakeErrors es (t1, t2)
+ Control.CollectErrors.Type: instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData es) => Control.DeepSeq.NFData (Control.CollectErrors.Type.CollectErrors es v)
+ Control.CollectErrors.Type: instance Control.DeepSeq.NFData es => Control.DeepSeq.NFData1 (Control.CollectErrors.Type.CollectErrors es)
+ Control.CollectErrors.Type: instance GHC.Base.Monoid es => Control.CollectErrors.Type.CanTakeErrors es (Control.CollectErrors.Type.CollectErrors es t)
+ Control.CollectErrors.Type: instance GHC.Generics.Generic (Control.CollectErrors.Type.CollectErrors es v)
+ Control.CollectErrors.Type: instance GHC.Generics.Generic1 (Control.CollectErrors.Type.CollectErrors es)
+ Control.CollectErrors.Type: liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2
+ Control.CollectErrors.Type: takeErrors :: CanTakeErrors es t => es -> t -> t
+ Control.CollectErrors.Type: takeErrorsNoValue :: CanTakeErrors es t => es -> t
+ Numeric.CollectErrors: class CanTakeErrors es t
+ Numeric.CollectErrors: liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2
+ Numeric.CollectErrors: takeErrors :: CanTakeErrors es t => es -> t -> t
+ Numeric.CollectErrors: takeErrorsNoValue :: CanTakeErrors es t => es -> t
+ Numeric.CollectErrors.Type: instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.ErrorCertaintyLevel
+ Numeric.CollectErrors.Type: instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.NumError
+ Numeric.CollectErrors.Type: instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.NumErrors
+ Numeric.CollectErrors.Type: instance GHC.Generics.Generic Numeric.CollectErrors.Type.ErrorCertaintyLevel
+ Numeric.CollectErrors.Type: instance GHC.Generics.Generic Numeric.CollectErrors.Type.NumError
+ Numeric.CollectErrors.Type: instance GHC.Generics.Generic Numeric.CollectErrors.Type.NumErrors
Files
- ChangeLog.md +6/−0
- collect-errors.cabal +3/−2
- src/Control/CollectErrors.hs +2/−0
- src/Control/CollectErrors/Type.hs +38/−10
- src/Numeric/CollectErrors.hs +2/−0
- src/Numeric/CollectErrors/Type.hs +11/−3
ChangeLog.md view
@@ -1,5 +1,11 @@ # Changelog for collect-errors +## v0.1.2.0++* Add CanTakeErrors type class and liftTakeErrors function++* Add instance of deepseq's NFData+ ## v0.1.1.0 * Add removeValue functions
collect-errors.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 5f417d9a5348a4f9b717f189c1f3f9770e6a4a4acf3d3840841fbd82f9ac2ef0+-- hash: 9a5c7d7488a22cd99bc416d26c4ed4d2d2e8f07224b622d5cec563fcffc839d2 name: collect-errors-version: 0.1.1.0+version: 0.1.2.0 synopsis: Error monad with a Float instance description: Please see the README on GitHub at <https://github.com/michalkonecny/collect-errors#readme> category: Math@@ -44,4 +44,5 @@ QuickCheck >=2.7 , base >=4.7 && <5 , containers+ , deepseq default-language: Haskell2010
src/Control/CollectErrors.hs view
@@ -26,6 +26,8 @@ , lift2pair , lift1Tpair , liftT1pair+, CanTakeErrors(..)+, liftTakeErrors ) where
src/Control/CollectErrors/Type.hs view
@@ -1,10 +1,17 @@ {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-} module Control.CollectErrors.Type where import Prelude import Control.Applicative ( Applicative(liftA2), liftA ) +import GHC.Generics+import Control.DeepSeq+ import qualified Data.Set as Set import Test.QuickCheck ( Arbitrary(arbitrary) )@@ -27,6 +34,7 @@ CollectErrors { getMaybeValue :: Maybe v , getErrors :: es }+ deriving (Generic, Generic1, NFData, NFData1) class CanTestErrorsCertain es where hasCertainError :: es -> Bool@@ -125,6 +133,20 @@ (CollectErrors _ ae) <*> (CollectErrors _ be) = CollectErrors Nothing (ae <> be) +instance (Monoid es) => Monad (CollectErrors es) where+ ae >>= f =+ case ae of+ CollectErrors (Just a) es1 ->+ let (CollectErrors mv es2) = f a in+ CollectErrors mv (es1 <> es2)+ CollectErrors _ es ->+ CollectErrors Nothing es++instance (Arbitrary t, Monoid es) => Arbitrary (CollectErrors es t) where+ arbitrary = (\v -> CollectErrors (Just v) mempty) <$> arbitrary++-- Various lifts:+ lift :: (Monoid es) => (a -> b) -> (CollectErrors es a) -> (CollectErrors es b) lift = liftA @@ -194,15 +216,21 @@ liftT1pair _ _ (CollectErrors _ be) = (CollectErrors Nothing be, CollectErrors Nothing be) -instance (Monoid es) => Monad (CollectErrors es) where- ae >>= f =- case ae of- CollectErrors (Just a) es1 ->- let (CollectErrors mv es2) = f a in- CollectErrors mv (es1 <> es2)- CollectErrors _ es ->- CollectErrors Nothing es+liftTakeErrors :: (CanTakeErrors es t2) => (t1 -> t2) -> (CollectErrors es t1 -> t2)+liftTakeErrors f (CollectErrors (Just v) e) = + takeErrors e $ f v+liftTakeErrors _f (CollectErrors _ e) = + takeErrorsNoValue e -instance (Arbitrary t, Monoid es) => Arbitrary (CollectErrors es t) where- arbitrary = (\v -> CollectErrors (Just v) mempty) <$> arbitrary+class CanTakeErrors es t where+ takeErrors :: es -> t -> t+ takeErrorsNoValue :: es -> t +instance (Monoid es) => CanTakeErrors es (CollectErrors es t) where+ takeErrors es1 (CollectErrors v es2) = CollectErrors v (es1 <> es2)+ takeErrorsNoValue es = CollectErrors Nothing es++instance (CanTakeErrors es t1, CanTakeErrors es t2) => CanTakeErrors es (t1,t2) where+ takeErrors es (v1,v2) = (takeErrors es v1, takeErrors es v2)+ takeErrorsNoValue es = (takeErrorsNoValue es, takeErrorsNoValue es)+
src/Numeric/CollectErrors.hs view
@@ -27,6 +27,8 @@ , lift2pair , lift1Tpair , liftT1pair+, CanTakeErrors(..)+, liftTakeErrors ) where
src/Numeric/CollectErrors/Type.hs view
@@ -1,10 +1,14 @@ {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveGeneric #-} module Numeric.CollectErrors.Type where +import GHC.Generics+import Control.DeepSeq+ import qualified Data.List as List import qualified Data.Set as Set @@ -19,7 +23,7 @@ type CN = CollectErrors NumErrors newtype NumErrors = NumErrors (Set.Set NumErrorLevel)- deriving (Eq,Semigroup, Monoid, CanTestErrorsCertain, CanTestErrorsPresent)+ deriving (Eq, Semigroup, Monoid, CanTestErrorsCertain, CanTestErrorsPresent, Generic, NFData) type NumErrorLevel = (NumError, ErrorCertaintyLevel) instance Show NumErrors where@@ -31,8 +35,10 @@ data NumError = DivByZero | OutOfDomain String | NumError String- deriving (Eq, Ord)+ deriving (Eq, Ord, Generic) +instance NFData NumError+ instance Show NumError where show DivByZero = "division by 0" show (OutOfDomain s) = "out of domain: " ++ s@@ -40,7 +46,9 @@ data ErrorCertaintyLevel = ErrorCertain | ErrorPotential- deriving (Eq, Ord)+ deriving (Eq, Ord, Generic)++instance NFData ErrorCertaintyLevel instance Show ErrorCertaintyLevel where show ErrorCertain = "ERROR"