
2. This is the only way you can evaluate your "pure value", and because of the monadic chaining, you cannot do it twice, you cannot "re-evaluate" it.
I'm sure there is a sense in which this is true, but I'm not seeing it. How would you describe what's going on here? twice :: IO () -> IO () twice x = x >> x main = twice $ putStrLn "foo" I would call that evaluating x twice (incidentally creating two separate evaluations of one pure action description), but I'd like to better see your perspective here. Regarding this issue generally, I feel like everyone's climbed on their particular war horses when someone sounded the PURITY trumpet, when *I don't think this is the kind of purity Applicative is talking about* - different things can be pure in different ways.