The way you're actually generating the list of Strings seems fine, but the formatting, at least in my opinion, can be improved: since raisingAsterisks and decreasingAsterisks are both relatively small "helper" functions for arrow, I would suggest putting them inside a where clause to make things a little easier to read.
arrow :: Int -> [String]
arrow n = increasing ++ tail decreasing
where increasing = take n $ iterate ('*' :) "*"
decreasing = reverse increasing
In this context, the variable names could be shortened, due to the fact that it's easy to understand what's happening. Note that the n
variable no longer needs to be passed, so increasing
and decreasing
actually are no longer even functions!
I hope you agree that changing your code just a little greatly improves readability.