
On 06.08.2013 10:46, Adam Gundry wrote:
On 06/08/13 06:14, J. Stutterheim wrote:
Suppose we now have the opportunity to change the name of the `return` function in Monad, what would be a "better" name for it? (for some definition of better)
Rather than proposing a different name, I'm going to challenge the premise of your question. Perhaps it would be better if `return` had no name at all. Consider the following:
return f `ap` s `ap` t
f <$> s <*> t
do { sv <- s ; tv <- t ; return (f sv tv) }
Indeed, I wished the 0-ary case would be more alike to the unary and binary case, cf. return f0 f1 <$> a1 f2 <$> a1 <*> a2 What is needed is a nice syntax for "idiom brackets".
These are all different ways of spelling
f s t
plus the necessary applicative or monadic bureaucracy. But why couldn't we write just the plain application, and let the type system deal with the plumbing of effects?
I would not think this is practically possible. For instance, if f :: a -> b -> c then it could be a binary function or a unary function in the context monad reading from a, thus, application f x is ambiguous or too sensitive, especially with type inference.
I realise that this may be too open a research area for your project...
-- Andreas Abel <>< Du bist der geliebte Mensch. Theoretical Computer Science, University of Munich Oettingenstr. 67, D-80538 Munich, GERMANY andreas.abel@ifi.lmu.de http://www2.tcs.ifi.lmu.de/~abel/