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
33 import Control.Applicative (Applicative(..))
35 import Control.Monad.Trans.Class
36 import Control.Monad.Trans.Except
37 import Control.Monad.Trans.State.Strict
40 import Data.Either (Either(..), either, isLeft, isRight)
41 import Data.Eq (Eq(..))
43 import Data.Functor ((<$>))
45 import Data.Maybe (Maybe(..))
46 import Data.Monoid (Monoid(..))
47 import Data.Ord (Ord(..))
48 import Data.Semigroup (Semigroup(..))
49 import Data.String (String)
50 import Data.Text (Text)
51 import Data.Word (Word8)
53 import Prelude (Num(..), Fractional(..), Integral(..), Integer, undefined, fromIntegral, error)
55 import System.Random (mkStdGen)
56 import Text.Show (Show(..))
58 debug :: Show a => String -> a -> a
59 debug msg x = trace (msg<>": "<>show x) x