bind and join make it awkward to implement various useful features (staging of tests, precomputed small testcases, statically chosen printers) by allowing generators to generate generators. I haven't actually seen a useful application of this ability, so this PR removes them.
(Technically, this makes Crowbar.gen an applicative functor instead of a monad, so we can extract information from generators before they're run.)
bind
andjoin
make it awkward to implement various useful features (staging of tests, precomputed small testcases, statically chosen printers) by allowing generators to generate generators. I haven't actually seen a useful application of this ability, so this PR removes them.(Technically, this makes
Crowbar.gen
an applicative functor instead of a monad, so we can extract information from generators before they're run.)