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

Reply via email to