2 ( module Criterion.Main
5 , Monad(..), forM, join, replicateM, unless, when
7 , Either(..), either, isLeft, isRight
8 , ($), (.), id, const, flip
13 , Monoid(..), Semigroup(..)
18 , Num, Fractional(..), Integral(..), Integer, fromIntegral
31 import Control.Applicative (Applicative(..))
33 import Control.Monad.Trans.Class
34 import Control.Monad.Trans.Except
35 import Control.Monad.Trans.State.Strict
38 import Data.Either (Either(..), either, isLeft, isRight)
39 import Data.Eq (Eq(..))
41 import Data.Functor ((<$>))
43 import Data.Maybe (Maybe(..))
44 import Data.Monoid (Monoid(..))
45 import Data.Ord (Ord(..))
46 import Data.Semigroup (Semigroup(..))
47 import Data.String (String)
48 import Data.Text (Text)
49 import Data.Word (Word8)
51 import Prelude (Num(..), Fractional(..), Integral(..), Integer, fromIntegral, error)
53 import System.Random (mkStdGen)
54 import Text.Show (Show(..))
56 debug :: Show a => String -> a -> a
57 debug msg x = trace (msg<>": "<>show x) x