Is such a function familia to the Haskell users?

  foldlWhile :: (a -> b -> a) -> (a -> Bool) -> a -> [b] -> a
  foldlWhile    f                p              a    bs  =
    case
        (bs, p a)
    of
    ([],    _    ) -> a
    (_,     False) -> a
    (b:bs', _    ) -> foldlWhile f p (f a b) bs'

foldl  does not seem to cover this.

Example.  Sum the list while the sum is less than bound:

  boundSum :: Integer -> [Integer] -> Integer
  boundSum    b =  
                  foldlWhile (+) (< b) 0

Example:  boundSum 100 $ map (^2) [1 ..] 

Is this reasonable? 

More `generic' variant:

  foldlWhileJust :: (a -> b -> Maybe a) -> a -> [b] -> a 
  foldlWhileJust    f                      a    bs  =  case bs of

           []    -> a
           b:bs' -> case f a b of Just a' -> foldlWhileJust f a' bs'
                                  _       -> a


Please, copy the replies to  [EMAIL PROTECTED]

-----------------
Serge Mechveliani
[EMAIL PROTECTED]


       
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to