
On Dec 28, 2007 5:58 AM, Cristian Baboi
Here is how I want print to be in Haskell
print :: (a->b) -> (a->b)
with print = id, but the following "side effect":
- I want to call the print function today, and get the value tomorrow.
You might be interested in the standard module Debug.Trace, which defines a function: trace :: String -> b -> b Which allows you to print something avoiding the IO monad as you seem to want. Then to get your print function, all you would need is a Show instance for a -> b: print f = trace (show f) f Then the Show instance: instance Show (a -> b) where show f = "<function>" And there you have it. It's not very useful, since it just prints <function> for every function, but there you go. I suspect you want to print some serialization of the function such that it can be read in again and executed later. You're not gonna get that any time soon. But I also suspect that there is another legitimate solution to your problem. Unless the problem has to do with transferring *arbitrary* functions (that is, your program knows nothing at all about what is transferred) between processes (not to be confused with threads, which Haskell is very good at). Luke