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 +34/−8
- isevaluated.cabal +3/−3
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