binary-search-0.9: Numeric/Search/Combinator/Pure.hs
-- | Pure counterpart for binary search.
module Numeric.Search.Combinator.Pure
(
-- * Evidence
M.Evidence(..),
-- * Search Range
M.Range,
M.InitializesSearch,
-- * Splitters
M.splitForever, M.splitTill,
-- * Search
search,
-- * Postprocess
M.smallest, M.largest
)where
import Data.Functor.Identity
import qualified Numeric.Search.Combinator.Monadic as M
-- | Perform search over pure predicates. The monadic version of this is 'M.searchM' .
search :: (M.InitializesSearch a init, Eq b) =>
init -> M.Splitter a -> (a -> b) -> [M.Range b a]
search init0 split0 pred0 = runIdentity $ M.searchM init0 split0 (Identity . pred0)