algebra-driven-design-0.1.1.1: Companion library for the book Algebra-Driven Design by Sandy Maguire

Safe HaskellNone
LanguageHaskell2010

Scavenge.CPS

Contents

Synopsis

Observations

runChallenge :: forall i k r. (HasFilter i, Ord (CustomFilter i), Ord k, Monoid r) => [i] -> Challenge i k r -> (Results k r, Bool) Source #

getClues :: forall i k r. (HasFilter i, Ord (CustomFilter i), Ord k, Monoid r) => Challenge i k r -> [i] -> MonoidalMap [k] ClueState Source #

getRewards :: forall i k r. (HasFilter i, Ord (CustomFilter i), Ord k, Monoid r) => Challenge i k r -> [i] -> r Source #

Challenges

reward :: forall i k r. (Ord k, Ord (CustomFilter i), Commutative r, Monoid r) => r -> Challenge i k r Source #

clue :: forall i k r. (Ord (CustomFilter i), Ord k, Monoid r) => [k] -> Challenge i k r -> Challenge i k r Source #

andThen :: Challenge i k r -> Challenge i k r -> Challenge i k r Source #

both :: forall i k r. (Ord (CustomFilter i), Ord k, Monoid r) => Challenge i k r -> Challenge i k r -> Challenge i k r Source #

eitherC :: forall i k r. (Ord (CustomFilter i), Ord k, Monoid r) => Challenge i k r -> Challenge i k r -> Challenge i k r Source #

bottom :: forall i k r. (Ord (CustomFilter i), Ord k, Monoid r) => Challenge i k r Source #

gate :: forall i k r. (Ord (CustomFilter i), Ord k, Monoid r) => InputFilter i -> Challenge i k r -> Challenge i k r Source #

Input filters

class HasFilter i where Source #

Associated Types

data CustomFilter i Source #

Methods

filterMatches :: CustomFilter i -> i -> Bool Source #

Instances
HasFilter Test Source # 
Instance details

Defined in Scavenge.InputFilter

Associated Types

data CustomFilter Test :: Type Source #

Clue states

Laws

Types

data Challenge i k r Source #

Instances
(HasFilter i, Arbitrary i, Ord (CustomFilter i), Ord k, Monoid r, Ord r) => Observe [i] (Results k r, Bool) (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

observe :: [i] -> Challenge i k r -> (Results k r, Bool) #

(Show (CustomFilter i), Ord (CustomFilter i), Ord k, Show k, Monoid r, Show r) => Show (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

showsPrec :: Int -> Challenge i k r -> ShowS #

show :: Challenge i k r -> String #

showList :: [Challenge i k r] -> ShowS #

(Semigroup r, Ord k, Ord (CustomFilter i)) => Semigroup (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

(<>) :: Challenge i k r -> Challenge i k r -> Challenge i k r #

sconcat :: NonEmpty (Challenge i k r) -> Challenge i k r #

stimes :: Integral b => b -> Challenge i k r -> Challenge i k r #

(Monoid r, Ord k, Ord (CustomFilter i)) => Monoid (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

mempty :: Challenge i k r #

mappend :: Challenge i k r -> Challenge i k r -> Challenge i k r #

mconcat :: [Challenge i k r] -> Challenge i k r #

(Arbitrary (CustomFilter i), Ord (CustomFilter i), Arbitrary k, Ord k, Monoid r, Commutative r, Arbitrary r, Eq r) => Arbitrary (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

arbitrary :: Gen (Challenge i k r) #

shrink :: Challenge i k r -> [Challenge i k r] #

data MonoidalMap k a #

A Map with monoidal accumulation

Instances
FunctorWithIndex k (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

imap :: (k -> a -> b) -> MonoidalMap k a -> MonoidalMap k b #

imapped :: IndexedSetter k (MonoidalMap k a) (MonoidalMap k b) a b #

FoldableWithIndex k (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

ifoldMap :: Monoid m => (k -> a -> m) -> MonoidalMap k a -> m #

ifolded :: IndexedFold k (MonoidalMap k a) a #

ifoldr :: (k -> a -> b -> b) -> b -> MonoidalMap k a -> b #

ifoldl :: (k -> b -> a -> b) -> b -> MonoidalMap k a -> b #

ifoldr' :: (k -> a -> b -> b) -> b -> MonoidalMap k a -> b #

ifoldl' :: (k -> b -> a -> b) -> b -> MonoidalMap k a -> b #

TraversableWithIndex k (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

itraverse :: Applicative f => (k -> a -> f b) -> MonoidalMap k a -> f (MonoidalMap k b) #

itraversed :: IndexedTraversal k (MonoidalMap k a) (MonoidalMap k b) a b #

Ord k => TraverseMin k (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Ord k => TraverseMax k (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

(Ord k, Ord v) => Observe () (MonoidalMap k v) (MonoidalMap k v) Source # 
Instance details

Defined in Scavenge.Results

Methods

observe :: () -> MonoidalMap k v -> MonoidalMap k v #

Functor (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

fmap :: (a -> b) -> MonoidalMap k a -> MonoidalMap k b #

(<$) :: a -> MonoidalMap k b -> MonoidalMap k a #

Foldable (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

fold :: Monoid m => MonoidalMap k m -> m #

foldMap :: Monoid m => (a -> m) -> MonoidalMap k a -> m #

foldr :: (a -> b -> b) -> b -> MonoidalMap k a -> b #

foldr' :: (a -> b -> b) -> b -> MonoidalMap k a -> b #

foldl :: (b -> a -> b) -> b -> MonoidalMap k a -> b #

foldl' :: (b -> a -> b) -> b -> MonoidalMap k a -> b #

foldr1 :: (a -> a -> a) -> MonoidalMap k a -> a #

foldl1 :: (a -> a -> a) -> MonoidalMap k a -> a #

toList :: MonoidalMap k a -> [a] #

null :: MonoidalMap k a -> Bool #

length :: MonoidalMap k a -> Int #

elem :: Eq a => a -> MonoidalMap k a -> Bool #

maximum :: Ord a => MonoidalMap k a -> a #

minimum :: Ord a => MonoidalMap k a -> a #

sum :: Num a => MonoidalMap k a -> a #

product :: Num a => MonoidalMap k a -> a #

Traversable (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

traverse :: Applicative f => (a -> f b) -> MonoidalMap k a -> f (MonoidalMap k b) #

sequenceA :: Applicative f => MonoidalMap k (f a) -> f (MonoidalMap k a) #

mapM :: Monad m => (a -> m b) -> MonoidalMap k a -> m (MonoidalMap k b) #

sequence :: Monad m => MonoidalMap k (m a) -> m (MonoidalMap k a) #

ToJSONKey k => ToJSON1 (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

liftToJSON :: (a -> Value) -> ([a] -> Value) -> MonoidalMap k a -> Value #

liftToJSONList :: (a -> Value) -> ([a] -> Value) -> [MonoidalMap k a] -> Value #

liftToEncoding :: (a -> Encoding) -> ([a] -> Encoding) -> MonoidalMap k a -> Encoding #

liftToEncodingList :: (a -> Encoding) -> ([a] -> Encoding) -> [MonoidalMap k a] -> Encoding #

(FromJSONKey k, Ord k) => FromJSON1 (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

liftParseJSON :: (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser (MonoidalMap k a) #

liftParseJSONList :: (Value -> Parser a) -> (Value -> Parser [a]) -> Value -> Parser [MonoidalMap k a] #

Ord k => Eq1 (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

liftEq :: (a -> b -> Bool) -> MonoidalMap k a -> MonoidalMap k b -> Bool #

Ord k => Ord1 (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

liftCompare :: (a -> b -> Ordering) -> MonoidalMap k a -> MonoidalMap k b -> Ordering #

Show k => Show1 (MonoidalMap k) 
Instance details

Defined in Data.Map.Monoidal

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> MonoidalMap k a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [MonoidalMap k a] -> ShowS #

(Ord k, Semigroup a) => IsList (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Associated Types

type Item (MonoidalMap k a) :: Type #

Methods

fromList :: [Item (MonoidalMap k a)] -> MonoidalMap k a #

fromListN :: Int -> [Item (MonoidalMap k a)] -> MonoidalMap k a #

toList :: MonoidalMap k a -> [Item (MonoidalMap k a)] #

(Eq k, Eq a) => Eq (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

(==) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

(/=) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

(Data k, Data a, Ord k) => Data (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> MonoidalMap k a -> c (MonoidalMap k a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (MonoidalMap k a) #

toConstr :: MonoidalMap k a -> Constr #

dataTypeOf :: MonoidalMap k a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (MonoidalMap k a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (MonoidalMap k a)) #

gmapT :: (forall b. Data b => b -> b) -> MonoidalMap k a -> MonoidalMap k a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> MonoidalMap k a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> MonoidalMap k a -> r #

gmapQ :: (forall d. Data d => d -> u) -> MonoidalMap k a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> MonoidalMap k a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> MonoidalMap k a -> m (MonoidalMap k a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> MonoidalMap k a -> m (MonoidalMap k a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> MonoidalMap k a -> m (MonoidalMap k a) #

(Ord k, Ord a) => Ord (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

compare :: MonoidalMap k a -> MonoidalMap k a -> Ordering #

(<) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

(<=) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

(>) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

(>=) :: MonoidalMap k a -> MonoidalMap k a -> Bool #

max :: MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a #

min :: MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a #

(Ord k, Read k, Read a) => Read (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

(Show k, Show a) => Show (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

showsPrec :: Int -> MonoidalMap k a -> ShowS #

show :: MonoidalMap k a -> String #

showList :: [MonoidalMap k a] -> ShowS #

(Ord k, Semigroup a) => Semigroup (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

(<>) :: MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a #

sconcat :: NonEmpty (MonoidalMap k a) -> MonoidalMap k a #

stimes :: Integral b => b -> MonoidalMap k a -> MonoidalMap k a #

(Ord k, Semigroup a) => Monoid (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

mempty :: MonoidalMap k a #

mappend :: MonoidalMap k a -> MonoidalMap k a -> MonoidalMap k a #

mconcat :: [MonoidalMap k a] -> MonoidalMap k a #

(Arbitrary k, Ord k, Arbitrary v) => Arbitrary (MonoidalMap k v) Source # 
Instance details

Defined in Scavenge.Results

Methods

arbitrary :: Gen (MonoidalMap k v) #

shrink :: MonoidalMap k v -> [MonoidalMap k v] #

(ToJSON a, ToJSONKey k) => ToJSON (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

(FromJSONKey k, Ord k, FromJSON a) => FromJSON (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

(NFData k, NFData a) => NFData (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

rnf :: MonoidalMap k a -> () #

Ord k => Ixed (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

ix :: Index (MonoidalMap k a) -> Traversal' (MonoidalMap k a) (IxValue (MonoidalMap k a)) #

Ord k => At (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

at :: Index (MonoidalMap k a) -> Lens' (MonoidalMap k a) (Maybe (IxValue (MonoidalMap k a))) #

Wrapped (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Associated Types

type Unwrapped (MonoidalMap k a) :: Type #

AsEmpty (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

_Empty :: Prism' (MonoidalMap k a) () #

Newtype (MonoidalMap k a) (Map k a) 
Instance details

Defined in Data.Map.Monoidal

Methods

pack :: Map k a -> MonoidalMap k a #

unpack :: MonoidalMap k a -> Map k a #

Each (MonoidalMap k a) (MonoidalMap k b) a b 
Instance details

Defined in Data.Map.Monoidal

Methods

each :: Traversal (MonoidalMap k a) (MonoidalMap k b) a b #

type Item (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

type Item (MonoidalMap k a) = (k, a)
type Index (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

type Index (MonoidalMap k a) = k
type IxValue (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

type IxValue (MonoidalMap k a) = a
type Unwrapped (MonoidalMap k a) 
Instance details

Defined in Data.Map.Monoidal

type Unwrapped (MonoidalMap k a) = Map k a

data Results k r Source #

Instances
(Ord k, Ord r) => Observe () (Results k r) (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

observe :: () -> Results k r -> Results k r #

(HasFilter i, Arbitrary i, Eq (CustomFilter i), Ord k, Commutative r, Monoid r, Ord r) => Observe [i] (Results k r, Bool) (Challenge i k r) Source # 
Instance details

Defined in Scavenge.Initial

Methods

observe :: [i] -> Challenge i k r -> (Results k r, Bool) #

(HasFilter i, Arbitrary i, Ord (CustomFilter i), Ord k, Monoid r, Ord r) => Observe [i] (Results k r, Bool) (Challenge i k r) Source # 
Instance details

Defined in Scavenge.CPS

Methods

observe :: [i] -> Challenge i k r -> (Results k r, Bool) #

(Eq r, Eq k) => Eq (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

(==) :: Results k r -> Results k r -> Bool #

(/=) :: Results k r -> Results k r -> Bool #

(Ord r, Ord k) => Ord (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

compare :: Results k r -> Results k r -> Ordering #

(<) :: Results k r -> Results k r -> Bool #

(<=) :: Results k r -> Results k r -> Bool #

(>) :: Results k r -> Results k r -> Bool #

(>=) :: Results k r -> Results k r -> Bool #

max :: Results k r -> Results k r -> Results k r #

min :: Results k r -> Results k r -> Results k r #

(Show k, Show r) => Show (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

showsPrec :: Int -> Results k r -> ShowS #

show :: Results k r -> String #

showList :: [Results k r] -> ShowS #

Generic (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Associated Types

type Rep (Results k r) :: Type -> Type #

Methods

from :: Results k r -> Rep (Results k r) x #

to :: Rep (Results k r) x -> Results k r #

(Semigroup r, Ord k) => Semigroup (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

(<>) :: Results k r -> Results k r -> Results k r #

sconcat :: NonEmpty (Results k r) -> Results k r #

stimes :: Integral b => b -> Results k r -> Results k r #

(Monoid r, Ord k) => Monoid (Results k r) Source # 
Instance details

Defined in Scavenge.Results

Methods

mempty :: Results k r #

mappend :: Results k r -> Results k r -> Results k r #

mconcat :: [Results k r] -> Results k r #

type Rep (Results k r) Source # 
Instance details

Defined in Scavenge.Results

type Rep (Results k r) = D1 (MetaData "Results" "Scavenge.Results" "algebra-driven-design-0.1.1.1-3rqLDj56t6xHDa2DBImysW" False) (C1 (MetaCons "Results" PrefixI True) (S1 (MetaSel (Just "rewards") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 r) :*: S1 (MetaSel (Just "clues") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (MonoidalMap [k] ClueState))))

data ClueState Source #

Instances
Bounded ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Enum ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Eq ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Ord ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Show ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Semigroup ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Monoid ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Arbitrary ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Observe () ClueState ClueState Source # 
Instance details

Defined in Scavenge.ClueState

Methods

observe :: () -> ClueState -> ClueState #