packages feed

criterion 0.5.0.10 → 0.5.1.0

raw patch · 8 files changed

+226/−85 lines, 8 filesdep +aesondep ~statisticsPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: aeson

Dependency ranges changed: statistics

API changes (from Hackage documentation)

- Criterion.Analysis: instance Eq OutlierVariance
- Criterion.Analysis: instance Eq Outliers
- Criterion.Analysis: instance Monoid Outliers
- Criterion.Analysis: instance Ord OutlierVariance
- Criterion.Analysis: instance Read Outliers
- Criterion.Analysis: instance Show OutlierVariance
- Criterion.Analysis: instance Show Outliers
+ Criterion.Analysis: OutlierVariance :: OutlierEffect -> Double -> OutlierVariance
+ Criterion.Analysis: SampleAnalysis :: Estimate -> Estimate -> OutlierVariance -> SampleAnalysis
+ Criterion.Analysis: anMean :: SampleAnalysis -> Estimate
+ Criterion.Analysis: anOutliers :: SampleAnalysis -> OutlierVariance
+ Criterion.Analysis: anStdDev :: SampleAnalysis -> Estimate
+ Criterion.Analysis: analyseSample :: Double -> Sample -> Int -> IO SampleAnalysis
+ Criterion.Analysis: data OutlierEffect
+ Criterion.Analysis: data SampleAnalysis
+ Criterion.Analysis: ovEffect :: OutlierVariance -> OutlierEffect
+ Criterion.Analysis: ovFraction :: OutlierVariance -> Double
+ Criterion.Analysis: scale :: Double -> SampleAnalysis -> SampleAnalysis
+ Criterion.Analysis.Types: Moderate :: OutlierEffect
+ Criterion.Analysis.Types: OutlierVariance :: OutlierEffect -> Double -> OutlierVariance
+ Criterion.Analysis.Types: Outliers :: {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> {-# UNPACK #-} !Int64 -> Outliers
+ Criterion.Analysis.Types: SampleAnalysis :: Estimate -> Estimate -> OutlierVariance -> SampleAnalysis
+ Criterion.Analysis.Types: Severe :: OutlierEffect
+ Criterion.Analysis.Types: Slight :: OutlierEffect
+ Criterion.Analysis.Types: Unaffected :: OutlierEffect
+ Criterion.Analysis.Types: anMean :: SampleAnalysis -> Estimate
+ Criterion.Analysis.Types: anOutliers :: SampleAnalysis -> OutlierVariance
+ Criterion.Analysis.Types: anStdDev :: SampleAnalysis -> Estimate
+ Criterion.Analysis.Types: data OutlierEffect
+ Criterion.Analysis.Types: data OutlierVariance
+ Criterion.Analysis.Types: data Outliers
+ Criterion.Analysis.Types: data SampleAnalysis
+ Criterion.Analysis.Types: highMild :: Outliers -> {-# UNPACK #-} !Int64
+ Criterion.Analysis.Types: highSevere :: Outliers -> {-# UNPACK #-} !Int64
+ Criterion.Analysis.Types: instance Data OutlierEffect
+ Criterion.Analysis.Types: instance Data OutlierVariance
+ Criterion.Analysis.Types: instance Data Outliers
+ Criterion.Analysis.Types: instance Data SampleAnalysis
+ Criterion.Analysis.Types: instance Eq OutlierEffect
+ Criterion.Analysis.Types: instance Eq OutlierVariance
+ Criterion.Analysis.Types: instance Eq Outliers
+ Criterion.Analysis.Types: instance Eq SampleAnalysis
+ Criterion.Analysis.Types: instance FromJSON OutlierEffect
+ Criterion.Analysis.Types: instance FromJSON OutlierVariance
+ Criterion.Analysis.Types: instance FromJSON Outliers
+ Criterion.Analysis.Types: instance FromJSON SampleAnalysis
+ Criterion.Analysis.Types: instance Monoid Outliers
+ Criterion.Analysis.Types: instance NFData OutlierEffect
+ Criterion.Analysis.Types: instance NFData OutlierVariance
+ Criterion.Analysis.Types: instance NFData Outliers
+ Criterion.Analysis.Types: instance NFData SampleAnalysis
+ Criterion.Analysis.Types: instance Ord OutlierEffect
+ Criterion.Analysis.Types: instance Read OutlierEffect
+ Criterion.Analysis.Types: instance Read OutlierVariance
+ Criterion.Analysis.Types: instance Read Outliers
+ Criterion.Analysis.Types: instance Show OutlierEffect
+ Criterion.Analysis.Types: instance Show OutlierVariance
+ Criterion.Analysis.Types: instance Show Outliers
+ Criterion.Analysis.Types: instance Show SampleAnalysis
+ Criterion.Analysis.Types: instance ToJSON OutlierEffect
+ Criterion.Analysis.Types: instance ToJSON OutlierVariance
+ Criterion.Analysis.Types: instance ToJSON Outliers
+ Criterion.Analysis.Types: instance ToJSON SampleAnalysis
+ Criterion.Analysis.Types: instance Typeable OutlierEffect
+ Criterion.Analysis.Types: instance Typeable OutlierVariance
+ Criterion.Analysis.Types: instance Typeable Outliers
+ Criterion.Analysis.Types: instance Typeable SampleAnalysis
+ Criterion.Analysis.Types: lowMild :: Outliers -> {-# UNPACK #-} !Int64
+ Criterion.Analysis.Types: lowSevere :: Outliers -> {-# UNPACK #-} !Int64
+ Criterion.Analysis.Types: ovEffect :: OutlierVariance -> OutlierEffect
+ Criterion.Analysis.Types: ovFraction :: OutlierVariance -> Double
+ Criterion.Analysis.Types: samplesSeen :: Outliers -> {-# UNPACK #-} !Int64
+ Criterion.Config: instance Data Plot
+ Criterion.Config: instance Data PlotOutput
+ Criterion.Config: instance Data PrintExit
+ Criterion.MultiMap: instance (Data k, Data v, Ord k, Ord v) => Data (MultiMap k v)
+ Criterion.MultiMap: instance Typeable2 MultiMap
- Criterion.Analysis: Moderate :: OutlierVariance
+ Criterion.Analysis: Moderate :: OutlierEffect
- Criterion.Analysis: Severe :: OutlierVariance
+ Criterion.Analysis: Severe :: OutlierEffect
- Criterion.Analysis: Slight :: OutlierVariance
+ Criterion.Analysis: Slight :: OutlierEffect
- Criterion.Analysis: Unaffected :: OutlierVariance
+ Criterion.Analysis: Unaffected :: OutlierEffect
- Criterion.Analysis: outlierVariance :: Estimate -> Estimate -> Double -> (OutlierVariance, Double)
+ Criterion.Analysis: outlierVariance :: Estimate -> Estimate -> Double -> OutlierVariance

Files

Criterion.hs view
@@ -1,6 +1,7 @@+{-# LANGUAGE RecordWildCards #-} -- | -- Module      : Criterion--- Copyright   : (c) 2009, 2010 Bryan O'Sullivan+-- Copyright   : (c) 2009, 2010, 2011 Bryan O'Sullivan -- -- License     : BSD-style -- Maintainer  : bos@serpentine.com@@ -26,8 +27,9 @@  import Control.Monad ((<=<), forM_, replicateM_, when) import Control.Monad.Trans (liftIO)-import Criterion.Analysis (OutlierVariance(..), classifyOutliers,-                           outlierVariance, noteOutliers)+import Criterion.Analysis (OutlierEffect(..), OutlierVariance(..),+                           SampleAnalysis(..), analyseSample,+                           classifyOutliers, noteOutliers) import Criterion.Config (Config(..), Plot(..), Verbosity(..), fromLJ) import Criterion.Environment (Environment(..)) import Criterion.IO (note, prolix, summary)@@ -39,11 +41,8 @@ import qualified Data.Vector.Unboxed as U import Statistics.Function (create, minMax) import Statistics.KernelDensity (epanechnikovPDF)-import Statistics.Resampling (Resample, resample)-import Statistics.Resampling.Bootstrap (Estimate(..), bootstrapBCA)-import Statistics.Sample (mean, stdDev)+import Statistics.Resampling.Bootstrap (Estimate(..)) import Statistics.Types (Sample)-import System.Random.MWC (withSystemRandom) import System.Mem (performGC) import Text.Printf (printf) @@ -76,28 +75,24 @@                  -> Criterion Sample runAndAnalyseOne env _desc b = do   times <- runBenchmark env b-  let numSamples = U.length times-  let ests = [mean,stdDev]-  numResamples <- getConfigItem $ fromLJ cfgResamples-  _ <- prolix "bootstrapping with %d resamples\n" numResamples-  res <- liftIO . withSystemRandom $ \gen ->-         resample gen ests numResamples times :: IO [Resample]   ci <- getConfigItem $ fromLJ cfgConfInterval-  let [em,es] = bootstrapBCA ci times ests res-      (effect, v) = outlierVariance em es (fromIntegral $ numSamples)-      wibble = case effect of+  numResamples <- getConfigItem $ fromLJ cfgResamples+  _ <- prolix "analysing with %d resamples\n" numResamples+  SampleAnalysis{..} <- liftIO $ analyseSample ci times numResamples+  let OutlierVariance{..} = anOutliers+  let wibble = case ovEffect of                  Unaffected -> "unaffected" :: String                  Slight -> "slightly inflated"                  Moderate -> "moderately inflated"                  Severe -> "severely inflated"-  bs "mean" em+  bs "mean" anMean   summary ","-  bs "std dev" es+  bs "std dev" anStdDev   summary "\n"   vrb <- getConfigItem $ fromLJ cfgVerbosity-  when (vrb == Verbose || (effect > Unaffected && vrb > Quiet)) $ do+  when (vrb == Verbose || (ovEffect > Unaffected && vrb > Quiet)) $ do     noteOutliers (classifyOutliers times)-    _ <- note "variance introduced by outliers: %.3f%%\n" (v * 100)+    _ <- note "variance introduced by outliers: %.3f%%\n" (ovFraction * 100)     _ <- note "variance is %s by outliers\n" wibble     return ()   return times
Criterion/Analysis.hs view
@@ -1,6 +1,7 @@+{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-} -- | -- Module      : Criterion.Analysis--- Copyright   : (c) 2009, 2010 Bryan O'Sullivan+-- Copyright   : (c) 2009, 2010, 2011 Bryan O'Sullivan -- -- License     : BSD-style -- Maintainer  : bos@serpentine.com@@ -12,7 +13,11 @@ module Criterion.Analysis     (       Outliers (..)+    , OutlierEffect(..)     , OutlierVariance(..)+    , SampleAnalysis(..)+    , analyseSample+    , scale     , analyseMean     , countOutliers     , classifyOutliers@@ -21,49 +26,20 @@     ) where  import Control.Monad (when)+import Criterion.Analysis.Types import Criterion.IO (note) import Criterion.Measurement (secs) import Criterion.Monad (Criterion)-import qualified Data.Vector.Unboxed as U import Data.Int (Int64) import Data.Monoid (Monoid(..)) import Statistics.Function (sort) import Statistics.Quantile (weightedAvg)-import Statistics.Resampling.Bootstrap (Estimate(..))-import Statistics.Sample (mean)+import Statistics.Resampling (Resample, resample)+import Statistics.Sample (mean, stdDev) import Statistics.Types (Sample)---- | Outliers from sample data, calculated using the boxplot--- technique.-data Outliers = Outliers {-      samplesSeen :: {-# UNPACK #-} !Int64-    , lowSevere   :: {-# UNPACK #-} !Int64-    -- ^ More than 3 times the IQR below the first quartile.-    , lowMild     :: {-# UNPACK #-} !Int64-    -- ^ Between 1.5 and 3 times the IQR below the first quartile.-    , highMild    :: {-# UNPACK #-} !Int64-    -- ^ Between 1.5 and 3 times the IQR above the third quartile.-    , highSevere  :: {-# UNPACK #-} !Int64-    -- ^ More than 3 times the IQR above the third quartile.-    } deriving (Eq, Read, Show)---- | A description of the extent to which outliers in the sample data--- affect the sample mean and standard deviation.-data OutlierVariance = Unaffected -- ^ Less than 1% effect.-                     | Slight     -- ^ Between 1% and 10%.-                     | Moderate   -- ^ Between 10% and 50%.-                     | Severe     -- ^ Above 50% (i.e. measurements-                                  -- are useless).-                       deriving (Eq, Ord, Show)--instance Monoid Outliers where-    mempty  = Outliers 0 0 0 0 0-    mappend = addOutliers--addOutliers :: Outliers -> Outliers -> Outliers-addOutliers (Outliers s a b c d) (Outliers t w x y z) =-    Outliers (s+t) (a+w) (b+x) (c+y) (d+z)-{-# INLINE addOutliers #-}+import System.Random.MWC (withSystemRandom)+import qualified Data.Vector.Unboxed as U+import qualified Statistics.Resampling.Bootstrap as B  -- | Classify outliers in a data set, using the boxplot technique. classifyOutliers :: Sample -> Outliers@@ -87,12 +63,12 @@  -- | Compute the extent to which outliers in the sample data affect -- the sample mean and standard deviation.-outlierVariance :: Estimate     -- ^ Bootstrap estimate of sample mean.-                -> Estimate     -- ^ Bootstrap estimate of sample-                                --   standard deviation.-                -> Double       -- ^ Number of original iterations.-                -> (OutlierVariance, Double)-outlierVariance µ σ a = (effect, varOutMin)+outlierVariance :: B.Estimate  -- ^ Bootstrap estimate of sample mean.+                -> B.Estimate  -- ^ Bootstrap estimate of sample+                               --   standard deviation.+                -> Double      -- ^ Number of original iterations.+                -> OutlierVariance+outlierVariance µ σ a = OutlierVariance effect varOutMin   where     effect | varOutMin < 0.01 = Unaffected            | varOutMin < 0.1  = Slight@@ -100,8 +76,8 @@            | otherwise        = Severe     varOutMin = (minBy varOut 1 (minBy cMax 0 µgMin)) / σb2     varOut c  = (ac / a) * (σb2 - ac * σg2) where ac = a - c-    σb        = estPoint σ-    µa        = estPoint µ / a+    σb        = B.estPoint σ+    µa        = B.estPoint µ / a     µgMin     = µa / 2     σg        = min (µgMin / 4) (σb / sqrt a)     σg2       = σg * σg@@ -131,6 +107,33 @@   _ <- note "mean is %s (%d iterations)\n" (secs µ) iters   noteOutliers . classifyOutliers $ a   return µ++-- | Multiply the 'Estimate's in an analysis by the given value, using+-- 'B.scale'.+scale :: Double                 -- ^ Value to multiply by.+      -> SampleAnalysis -> SampleAnalysis+scale f s@SampleAnalysis{..} = s {+                                 anMean = B.scale f anMean+                               , anStdDev = B.scale f anStdDev+                               }++-- | Perform a bootstrap analysis of a non-parametric sample.+analyseSample :: Double         -- ^ Confidence interval (between 0 and 1).+              -> Sample         -- ^ Sample data.+              -> Int            -- ^ Number of resamples to perform+                                -- when bootstrapping.+              -> IO SampleAnalysis+analyseSample ci samples numResamples = do+  let ests = [mean,stdDev]+  resamples <- withSystemRandom $ \gen ->+               resample gen ests numResamples samples :: IO [Resample]+  let [estMean,estStdDev] = B.bootstrapBCA ci samples ests resamples+      ov = outlierVariance estMean estStdDev (fromIntegral $ U.length samples)+  return SampleAnalysis {+               anMean = estMean+             , anStdDev = estStdDev+             , anOutliers = ov+             }  -- | Display a report of the 'Outliers' present in a 'Sample'. noteOutliers :: Outliers -> Criterion ()
+ Criterion/Analysis/Types.hs view
@@ -0,0 +1,147 @@+{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, RecordWildCards #-}+-- |+-- Module      : Criterion.Analysis.Types+-- Copyright   : (c) 2011 Bryan O'Sullivan+--+-- License     : BSD-style+-- Maintainer  : bos@serpentine.com+-- Stability   : experimental+-- Portability : GHC+--+-- Analysis types.++module Criterion.Analysis.Types+    (+      Outliers (..)+    , OutlierEffect(..)+    , OutlierVariance(..)+    , SampleAnalysis(..)+    ) where++import Control.Applicative ((<$>), (<*>), empty, pure)+import Control.DeepSeq (NFData(rnf))+import Data.Aeson.Types+import Data.Data (Data)+import Data.Int (Int64)+import Data.Monoid (Monoid(..))+import Data.Typeable (Typeable)+import qualified Statistics.Resampling.Bootstrap as B++-- | Outliers from sample data, calculated using the boxplot+-- technique.+data Outliers = Outliers {+      samplesSeen :: {-# UNPACK #-} !Int64+    , lowSevere   :: {-# UNPACK #-} !Int64+    -- ^ More than 3 times the interquartile range (IQR) below the+    -- first quartile.+    , lowMild     :: {-# UNPACK #-} !Int64+    -- ^ Between 1.5 and 3 times the IQR below the first quartile.+    , highMild    :: {-# UNPACK #-} !Int64+    -- ^ Between 1.5 and 3 times the IQR above the third quartile.+    , highSevere  :: {-# UNPACK #-} !Int64+    -- ^ More than 3 times the IQR above the third quartile.+    } deriving (Eq, Read, Show, Typeable, Data)++instance NFData Outliers++instance ToJSON Outliers where+    toJSON Outliers{..} = object [+                            "samplesSeen" .= samplesSeen+                          , "lowSevere" .= lowSevere+                          , "lowMild" .= lowMild+                          , "highMild" .= highMild+                          , "highSevere" .= highSevere+                          ]++instance FromJSON Outliers where+    parseJSON (Object v) = Outliers <$>+                           v .: "samplesSeen" <*>+                           v .: "lowSevere" <*>+                           v .: "lowMild" <*>+                           v .: "highMild" <*>+                           v .: "highSevere"+    parseJSON _ = empty++-- | A description of the extent to which outliers in the sample data+-- affect the sample mean and standard deviation.+data OutlierEffect = Unaffected -- ^ Less than 1% effect.+                   | Slight     -- ^ Between 1% and 10%.+                   | Moderate   -- ^ Between 10% and 50%.+                   | Severe     -- ^ Above 50% (i.e. measurements+                                -- are useless).+                     deriving (Eq, Ord, Read, Show, Typeable, Data)++instance NFData OutlierEffect++instance ToJSON OutlierEffect where+    toJSON Unaffected = "unaffected"+    toJSON Slight     = "slight"+    toJSON Moderate   = "moderate"+    toJSON Severe     = "severe"++instance FromJSON OutlierEffect where+    parseJSON (String t) = case t of+                             _| t== "unaffected" -> pure Unaffected+                             _| t== "slight"     -> pure Slight+                             _| t== "moderate"   -> pure Moderate+                             _| t== "severe"     -> pure Severe+                              | otherwise        -> empty+    parseJSON _ = empty++instance Monoid Outliers where+    mempty  = Outliers 0 0 0 0 0+    mappend = addOutliers++addOutliers :: Outliers -> Outliers -> Outliers+addOutliers (Outliers s a b c d) (Outliers t w x y z) =+    Outliers (s+t) (a+w) (b+x) (c+y) (d+z)+{-# INLINE addOutliers #-}++-- | Analysis of the extent to which outliers in a sample affect its+-- mean and standard deviation.+data OutlierVariance = OutlierVariance {+      ovEffect   :: OutlierEffect+    -- ^ Qualitative description of effect.+    , ovFraction :: Double+    -- ^ Quantitative description of effect (a fraction between 0 and 1).+    } deriving (Eq, Read, Show, Typeable, Data)++instance NFData OutlierVariance where+    rnf OutlierVariance{..} = rnf ovEffect `seq` rnf ovFraction `seq` ()++instance ToJSON OutlierVariance where+    toJSON OutlierVariance{..} = object [+                                   "effect" .= ovEffect+                                 , "fraction" .= ovFraction+                                 ]++instance FromJSON OutlierVariance where+    parseJSON (Object v) = OutlierVariance <$>+                           v .: "effect" <*>+                           v .: "fraction"+    parseJSON _ = empty++-- | Result of a bootstrap analysis of a non-parametric sample.+data SampleAnalysis = SampleAnalysis {+      anMean :: B.Estimate+    , anStdDev :: B.Estimate+    , anOutliers :: OutlierVariance+    } deriving (Eq, Show, Typeable, Data)++instance NFData SampleAnalysis where+    rnf SampleAnalysis{..} =+        rnf anMean `seq` rnf anStdDev `seq` rnf anOutliers `seq` ()++instance ToJSON SampleAnalysis where+    toJSON SampleAnalysis{..} = object [+                                  "mean" .= anMean+                                , "stdDev" .= anStdDev+                                , "outliers" .= anOutliers+                                ]++instance FromJSON SampleAnalysis where+    parseJSON (Object v) = SampleAnalysis <$>+                           v .: "mean" <*>+                           v .: "stdDev" <*>+                           v .: "outliers"+    parseJSON _ = empty
Criterion/Config.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}+{-# LANGUAGE DeriveDataTypeable #-}  -- | -- Module      : Criterion.Config@@ -24,6 +24,7 @@     ) where  import Criterion.MultiMap (MultiMap)+import Data.Data (Data) import Data.Function (on) import Data.Monoid (Monoid(..), Last(..)) import Data.Typeable (Typeable)@@ -39,7 +40,7 @@                | List           -- ^ Print a list of known benchmarks.                | Version        -- ^ Print version information (if known).                | Help           -- ^ Print a help\/usaage message.-                 deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable)+                 deriving (Eq, Ord, Bounded, Enum, Read, Show, Typeable, Data)  instance Monoid PrintExit where     mempty  = Nada@@ -52,12 +53,12 @@                 | PNG Int Int   -- ^ PNG file, dimensions in pixels.                 | SVG Int Int   -- ^ SVG file, dimensions in points.                 | Window Int Int-- ^ Display in a window, dimensions in pixels.-                  deriving (Eq, Ord, Read, Show, Typeable)+                  deriving (Eq, Ord, Read, Show, Typeable, Data)  -- | What to plot. data Plot = KernelDensity       -- ^ Kernel density estimate of probabilities.           | Timing              -- ^ Benchmark timings.-            deriving (Eq, Ord, Read, Show, Typeable)+            deriving (Eq, Ord, Read, Show, Typeable, Data)  -- | Top-level program configuration. data Config = Config {
Criterion/Measurement.hs view
@@ -40,7 +40,7 @@   return $! end - start  getTime :: IO Double-getTime = (fromRational . toRational) `fmap` getPOSIXTime+getTime = realToFrac `fmap` getPOSIXTime  runForAtLeast :: Double -> Int -> (Int -> IO a) -> IO (Double, Int, a) runForAtLeast howLong initSeed act = loop initSeed (0::Int) =<< getTime
Criterion/MultiMap.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DeriveDataTypeable #-}+ module Criterion.MultiMap     (       MultiMap@@ -7,7 +9,9 @@     , lookup     ) where +import Data.Data (Data) import Data.Monoid (Monoid(..))+import Data.Typeable (Typeable) import Prelude hiding (lookup) import qualified Data.Map as M import qualified Data.Set as S@@ -15,7 +19,7 @@ newtype MultiMap k v = MultiMap {       toMap :: M.Map k (S.Set v)     }-    deriving (Eq, Ord, Read, Show)+    deriving (Eq, Ord, Read, Show, Typeable, Data)  instance (Ord k, Ord v) => Monoid (MultiMap k v) where     mempty = MultiMap M.empty
criterion.cabal view
@@ -1,5 +1,5 @@ name:           criterion-version:        0.5.0.10+version:        0.5.1.0 synopsis:       Robust, reliable performance measurement and analysis license:        BSD3 license-file:   LICENSE@@ -13,10 +13,8 @@ cabal-version:  >= 1.6 extra-source-files:   README.markdown-  examples/Fibber.hs-  examples/Judy.hs-  examples/Makefile-  examples/Tiny.hs+  examples/*.hs+ description:   This library provides a powerful but simple way to measure the   performance of Haskell code.  It provides both a framework for@@ -40,6 +38,7 @@   exposed-modules:     Criterion     Criterion.Analysis+    Criterion.Analysis.Types     Criterion.Config     Criterion.Environment     Criterion.IO@@ -51,6 +50,7 @@     Criterion.Types    build-depends:+    aeson,     base < 5,     bytestring >= 0.9 && < 1.0,     containers,@@ -59,7 +59,7 @@     mtl,     mwc-random >= 0.8.0.3,     parsec >= 3.1.0,-    statistics >= 0.8.0.5,+    statistics >= 0.8.0.6,     time,     vector >= 0.7.0.0,     vector-algorithms >= 0.4
− examples/Makefile
@@ -1,9 +0,0 @@-all := Fibber Judy Tiny--all: $(all)--%: %.hs-	ghc -O --make $<--clean:-	-rm -f *.hi *.o $(all)