スマソ、スペースが消えた。

while :: Monad m => m Bool -> m a -> m ()
while t s = do b <- t
         if(b)
          then do { s; while t s; return () }
          else do { return () }