Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 6th, 2012  |  syntax: None  |  size: 0.63 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. spanM, takeWhileM in Haskell
  2. Prelude Control.Monad.Loops> let xs = ["a", "bb", "ccc", "dddd", "eeeee"]
  3. Prelude Control.Monad.Loops> let f x = putStrLn x >> return (length x)
  4. Prelude Control.Monad.Loops> let p x = x < 2
  5. Prelude Control.Monad.Loops> allM (fmap p . f) xs
  6. a
  7. bb
  8. False
  9.        
  10. process :: [IO Int] -> IO Bool
  11. process []     = return True
  12. process [a]    = a >> return True
  13. process (a:as) = do
  14.     n <- a
  15.     if n > 0
  16.         then return False
  17.         else process as
  18.        
  19. import Control.Monad.ListM
  20.  
  21. process :: [IO Int] -> IO Bool
  22. process as = do
  23.   taken <- takeWhileM (>>= return . (<= 0)) as
  24.   return (length taken >= length as - 1)