On Wednesday 07 December 2005 20:19, you wrote: > On Wed, Dec 07, 2005 at 07:47:46PM +0000, Robin Green wrote: > > > Some day you may thank for this verbosity, because it encourages > > > you do program in a purely functional way making your program more > > > friendly for SMP execution. > > > > You are mistaken. The verbosity is necessary if you want "visual" > > referential transparency, but not necessary if you only want pure > > functional programming. Only the latter is helpful for optimisability. I > > am hoping to write a paper on this topic. > > I am afraid I don't understand.
Let's say you want to write a function seqPair :: (Monad m) => (m a, m b) -> m (a, b) which returns a computation which does the left computation followed by the right computation (i.e. it's like the sequence function, but for pairs instead of lists). In Haskell you could write this as: seqPair mx my = do x <- mx y <- my return (x, y) However, wouldn't it be nice if we could write something like (warning: hypothetical syntax) seqPair $= (,) or (the slightly less cryptic version) seqPair x y $= (x, y) This is not referentially transparent because it is not equivalent to seqPair x y $= swap (y, x) where swap (a, b) = (b, a) (can you see why not?) But it _is_ semantically equivalent to the first definition I gave, which is functionally pure, so it is also functionally pure (at least, when you consider it as a "black box"). -- Robin _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe