I just started learning Haskell, but the absence of loops is infinitely frustrating right now. I figured out how to write loops for functions. My problem, however, is that I want to output some results while iterating the loop. It seems that I have to use debug to perform this simple task.
So right now I would just appreciate an example of how to print out a string 10 times in the main structure.
In other words, I want to do this 10 times:
main = do putStrLn "a string"
Thanks. I feel this will be very illuminating for my task.
Recursion is important to Haskell because unlike imperative languages, you do computations in Haskell by declaring what something is instead of declaring how you get it. That's why there are no while loops or for loops in Haskell and instead we many times have to use recursion to declare what something is.
Haskell doesn't actually have do-while loops, it has recursion that you can use to implement do-while loops. Haskell doesn't actually have loops at all, just recursion, you'll have to learn how to re-implement features from imperative languages that you're used instead.
You could define a recursive function that prints "a string" n times (n being the parameter of the function), like this:
printStringNTimes 0 = return () printStringNTimes n = do putStrLn "a string" printStringNTimes (n-1) main = printStringNTimes 10
A somewhat more general approach would be to define a function that repeats any IO action n times:
repeatNTimes 0 _ = return () repeatNTimes n action = do action repeatNTimes (n-1) action main = repeatNTimes 10 (putStrLn "a string")
The above function already exists in Control.Monad
under the name replicateM_
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With