# The `monad-choice` package This package provides a multipurpose monad transformer (and associated monad and class), to represent the idea of a result depending on the outcomes of a series of choices. ## Example The following is a simple use of `MonadChoice` for creating the name of a berry. {-# Language FlexibleContexts #-} berry :: MonadChoice NonEmpty m => m String berry = do berryColor <- choose $ "red" :| ["blue", "orange", "yellow", "black"] berryFlavor <- choose $ "sweet" :| ["sour", "bitter"] (++ "berry") <$> choose ( berryColor :| [berryFlavor, berryColor ++ "-" ++ berryFlavor] ) This can be used with `MonadRandom` to create a random berry, used with `Gen` to create berries for unit tests, or with user input as the structure for a menu where the user selects a berry.