nothunks 0.2.1.1 → 0.3.0.0
raw patch · 4 files changed
+20/−13 lines, 4 files
Files
- CHANGELOG.md +4/−0
- nothunks.cabal +1/−1
- src/NoThunks/Class.hs +14/−11
- test/Test/NoThunks/Class.hs +1/−1
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for nothunks +## 0.3.0 -- 2024-08-13++* Include _both_ `Context` _and_ `Info` in `ThunkInfo` (#54)+ ## 0.2.1.0 -- 2024-02-06 * Exported `mkThunkInfo`.
nothunks.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: nothunks-version: 0.2.1.1+version: 0.3.0.0 synopsis: Examine values for unexpected thunks description: Long lived application data typically should not contain any thunks. This library can be used to examine values for
src/NoThunks/Class.hs view
@@ -133,8 +133,8 @@ -- WHNF, and if so, adds the type into the context (using 'showTypeOf' or -- 'whereFrom' if available), and calls 'wNoThunks'. See 'ThunkInfo' for -- a detailed discussion of the type context.- -- --+ -- -- See also discussion of caveats listed for 'checkContainsThunks'. noThunks :: Context -> a -> IO (Maybe ThunkInfo) noThunks ctxt x = do@@ -227,7 +227,10 @@ -- > ["Int","List","(,)"] an Int in the [Int] in the pair -- -- Note: prior to `ghc-9.6` a list was indicated by `[]`.-newtype ThunkInfo = ThunkInfo { thunkInfo :: Either Context Info }+data ThunkInfo = ThunkInfo {+ thunkContext :: Context+ , thunkInfo :: Maybe Info+ } deriving Show -- | Construct `ThunkInfo` either from `Context` or information provided by@@ -235,7 +238,7 @@ -- mkThunkInfo :: Context -> a -> IO ThunkInfo #if MIN_VERSION_base(4,16,0)-mkThunkInfo ctxt a = ThunkInfo . maybe (Left ctxt) (Right . fmt) <$> whereFrom a+mkThunkInfo ctxt a = ThunkInfo ctxt . fmap fmt <$> whereFrom a where fmt :: InfoProv -> Info fmt InfoProv { ipSrcFile, ipSrcSpan,@@ -243,7 +246,7 @@ ipLabel ++ " :: " ++ ipTyDesc ++ " @ " ++ ipSrcFile ++ ":" ++ ipSrcSpan #else-mkThunkInfo ctxt _ = return (ThunkInfo (Left ctxt))+mkThunkInfo ctxt _ = return (ThunkInfo ctxt Nothing) #endif @@ -527,18 +530,18 @@ deriving via Bool instance NoThunks Semigroup.All deriving via Bool instance NoThunks Semigroup.Any deriving via a instance NoThunks a => NoThunks (Semigroup.Sum a)-deriving via a instance NoThunks a => NoThunks (Semigroup.Product a) -deriving via a instance NoThunks a => NoThunks (Semigroup.WrappedMonoid a) -instance (NoThunks a, NoThunks b) => NoThunks (Semigroup.Arg a b) +deriving via a instance NoThunks a => NoThunks (Semigroup.Product a)+deriving via a instance NoThunks a => NoThunks (Semigroup.WrappedMonoid a)+instance (NoThunks a, NoThunks b) => NoThunks (Semigroup.Arg a b) {------------------------------------------------------------------------------- Monoids -------------------------------------------------------------------------------} -deriving via (Maybe a) instance NoThunks a => NoThunks (Monoid.First a) -deriving via (Maybe a) instance NoThunks a => NoThunks (Monoid.Last a) -deriving via (f a) instance NoThunks (f a) => NoThunks (Monoid.Alt f a) -deriving via (f a) instance NoThunks (f a) => NoThunks (Monoid.Ap f a) +deriving via (Maybe a) instance NoThunks a => NoThunks (Monoid.First a)+deriving via (Maybe a) instance NoThunks a => NoThunks (Monoid.Last a)+deriving via (f a) instance NoThunks (f a) => NoThunks (Monoid.Alt f a)+deriving via (f a) instance NoThunks (f a) => NoThunks (Monoid.Ap f a) {------------------------------------------------------------------------------- Solo
test/Test/NoThunks/Class.hs view
@@ -107,7 +107,7 @@ -- | Check whether the model and the implementation agree on whether the value -- is in NF, and if not, what the context of the thunk is. agreeOnContext :: Maybe ThunkInfo -> Maybe [String] -> Bool-agreeOnContext mThunk mCtxt = (thunkInfo <$> mThunk) == (Left <$> mCtxt)+agreeOnContext mThunk mCtxt = (thunkContext <$> mThunk) == mCtxt {------------------------------------------------------------------------------- Infrastructure