Well, if you want that in production, not for debugging purposes, you should 
change the type signature of mergesort so that it uses some monad. Printing 
requires IO monad; however, I would advise to collect all intermediate results 
using Writer monad, and print them afterwards:

mergesort [] = return []
mergesort [x] = return [x]
mergesort xs = do
  tell [xs] -- that's right, "[xs]", not "xs"
  let (as, bs) = splitAt (length xs `quot` 2) xs
  liftM2 merge (mergesort as) (mergesort bs)  

On 4 Feb 2012, at 22:23, Qi Qi wrote:

> Hello,
> 
> I have a question;how can I print out the intermediate number lists in a
> mergesort recursive function like the following one.
> 
> merge [] ys = ys
> merge xs [] = xs
> merge (x:xs) (y:ys) = if x <= y
>                      then x : merge xs (y:ys)
>                      else y : merge (x:xs) ys
> 
> mergesort [] = []
> mergesort [x] = [x]
> mergesort xs = let (as, bs) = splitAt (length xs `quot` 2) xs
>               in merge (mergesort as) (mergesort bs)
> 
> main = do
>       print $ mergesort [5,4,3,2,1]
> 
> 
> In the main function, it only prints out the final number list. But I'd
> like to print out the number lists in every recursive level. How can I
> do that? Thanks.
> 
> 
> -- 
> Qi Qi
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to