tags:

views:

162

answers:

3

Hi, I am writing a function like this.

func :: IO()
func = putStr print "func = putStr print"

I know it is incorrect but the idea is I want the putStr applied onto the string then print applied onto the same string "fun = .." so that the output would be:

func = putStr print "func = putStr print"

which is the same as my function definition. Thanks

+1  A: 

I'm not sure where you are going with the "without using >>" part (if that's really the point use do-notation), but you can easily write a helper function that applies two functions in sequence to the same input:

tee f g s = f s >> g s

func = tee putStr print "..."

Also, to just avoid repeating the string, a local variable with let or where would probably be the easiest:

let s = "..."
in  putStr s >> print s
sth
+6  A: 

If your goal is to write a quine (Another Haskell example given in this article too), you could use lambda notation for variable capture.

func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
Dario
+2  A: 

You could do it like this:

doActions str actions = mapM_ ($ str) actions
Chuck