[Haskell-cafe] Point-free style

Fritz Ruehr fruehr at willamette.edu
Fri Feb 11 20:06:37 EST 2005


Hmm, Hugs gives me this:

	(.) . (.) . (.) :: (a -> b) -> (c -> d -> e -> a) -> c -> d -> e -> b

which I think is correct, if still not transparent in its meaning. 
(ghci gives me a slightly re-named and explicitly quantified 
variation).

Basically, the idea is that this sort of expression, with n occurrences 
of *parenthesized* dots (and n-1 unparenthesized ones interspersed) is 
the "compose a 1-argument function with an n-argument function" variant 
of the composition operator (in the "obvious" way). For small n, this 
allows one to get around the limitations of (.) for some points-free 
applications: for large n, it probably isn't worth it. (Appropriate 
definitions of "small" and "large" tend to vary :) ).

   --  Fritz

Example nicked from the file I attached to the last message:

	(.<) = (.) . (.)

	stutter = concat .< replicate

Here the use of the "<" symbol is onomatopoeic (or the graphical 
homologue of that): the two "arms" of the symbol, branching out to the 
right, suggest that this variant of the composition operator, (.<), 
takes a 2-argument function on the right.

On Feb 11, 2005, at 12:00 AM, Ketil Malde wrote:

> ...  Type signatures help, of course.  E.g. with
> the previously mentioned and rather cryptic function
>
>         (.) . (.) .(.)
>
> I entered it into GHCi, and got
>
>         :: forall a a b c a.
>               (b -> c) -> (a -> a -> a -> b) -> a -> a -> a -> c
>
> and it suddenly is much clearer what it does.
>
> -kzm
> -- 
> If I haven't seen further, it is by standing in the footprints of 
> giants



More information about the Haskell-Cafe mailing list