packages feed

isevaluated 0.1 → 0.2

raw patch · 2 files changed

+37/−11 lines, 2 filesdep +vacuumdep −ghc

Dependencies added: vacuum

Dependencies removed: ghc

Files

Data/IsEvaluated.hs view
@@ -1,6 +1,7 @@ module Data.IsEvaluated(isEvaluated) where -import RtClosureInspect+import GHC.Vacuum+import GHC.Vacuum.ClosureType  -- |Checks whether Control.Exception.evaluate (or rwhnf) would do no work -- when applied to the value. May produce false negatives (where isEvaluated@@ -9,13 +10,38 @@ -- Use case: if isEvaluated foo returns True, then evaluate foo will never -- throw an exception, or indeed take more than constant (small) time. isEvaluated :: a -> IO Bool-isEvaluated a = (discriminate . tipe) `fmap` getClosureData a+isEvaluated a = discriminate `fmap` closureType a     where-      discriminate Constr          = True-      discriminate Fun             = True-      discriminate (Indirection _) = True-      discriminate (MutVar _)      = True-      discriminate (MVar _)        = True-      discriminate PAP             = True+      discriminate CONSTR              = True+      discriminate CONSTR_1_0          = True+      discriminate CONSTR_0_1          = True+      discriminate CONSTR_2_0          = True+      discriminate CONSTR_1_1          = True+      discriminate CONSTR_0_2          = True+      discriminate CONSTR_STATIC       = True+      discriminate CONSTR_NOCAF_STATIC = True+      discriminate FUN                 = True+      discriminate FUN_1_0             = True+      discriminate FUN_0_1             = True+      discriminate FUN_2_0             = True+      discriminate FUN_1_1             = True+      discriminate FUN_0_2             = True+      discriminate FUN_STATIC          = True+      discriminate PAP                 = True+      discriminate IND                 = True+      discriminate IND_OLDGEN          = True+      discriminate IND_PERM            = True+      discriminate IND_OLDGEN_PERM     = True+      discriminate IND_STATIC          = True+-- MVAR_CLEAN  -- These are questionable+-- MVAR_DIRTY+-- ARR_WORDS+-- MUT_ARR_PTRS_CLEAN	+-- MUT_ARR_PTRS_DIRTY	+-- MUT_ARR_PTRS_FROZEN0	+-- MUT_ARR_PTRS_FROZEN	+-- MUT_VAR_CLEAN	+-- MUT_VAR_DIRTY+-- WEAK       -- It might be possible to handle THUNK_SELECTOR specially       discriminate _               = False
isevaluated.cabal view
@@ -1,11 +1,11 @@ name:                isevaluated-version:             0.1+version:             0.2 synopsis:            Check whether a value has been evaluated description:         An IO action to check whether some value has been evaluated.                      .                      If isEvaluated returns True, evaluating it to weak-head                      normal form won't throw exceptions or take time.-category:            Control, Data+category:            Control, Data, GHC, Debug license:             PublicDomain author:              Svein Ove Aas maintainer:          svein.ove@aas.no@@ -14,5 +14,5 @@ stability:           experimental  Library-  build-depends:       base, ghc > 6.10.1, ghc <= 6.10.3+  build-depends:       base, vacuum   Exposed-Modules:     Data.IsEvaluated