In J (a sort of dialect of APL), there's a thing called "under", written "&.".  The expression "(f &. g) x" is equivalent to "(g^:_1) (f (g x))" where "g^:_1" is J's "obverse" of g, which in cases where it exists is usually the inverse of g (http://www.jsoftware.com/help/dictionary/intro26.htm).  Abusing notation with some weird mixture of Haskell and J, this means that "((+) &. log)" multiplies numbers by taking logs, adding and exponentiating.  You "inv" is "under" for cases where g == g^-1 (reverse being a good example).  In cases where g /= g^-1, it's obviously a useful operation, but the case where g == g^-1 seems a bit specialised.  Can you think of any other useful cases than g == reverse?  I guess "inv (1/) sum" is the harmonic mean, but that's another special case.


On 17 August 2013 11:40, Mateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk> wrote:
On 17/08/13 10:11, Christopher Done wrote:
> Anyone ever needed this? Me and John Wiegley were discussing a decent
> name for it, John suggested inv as in involution. E.g.
First thing I thought was ‘inverse’…
>
> inv reverse (take 10)
> inv reverse (dropWhile isDigit)
> trim = inv reverse (dropWhile isSpace) . dropWhile isSpace
>
> That seems to be the only use-case I've ever come across.
>
I do this a lot as well. Why not skip the ‘g’ all together and have ‘f .
reverse . f’ if that's all we're doing? You could even call it fromEnd
at that point and we end up with a rather intuitive ‘fromEnd (drop 10)’.
Maybe even just have an operator.
> There's also this one:
>
> co f g = f g . g
>
> which means you can write
>
> trim = co (inv reverse) (dropWhile isSpace)
>
> but that's optimizing an ever rarer use-case.
>


Is this a proposal for addition to something or is it just general
discussion?


--
Mateusz K.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe




--
Ian Ross   Tel: +43(0)6804451378   ian@skybluetrades.net   www.skybluetrades.net