[Haskell-cafe] Re: Pointfree composition for higher arity
oleg at okmij.org
oleg at okmij.org
Thu Feb 18 01:54:48 EST 2010
Sean Leather wrote:
> (...) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
> (...) f g x y = f (g x y)
> Does anybody else care about this? What are some alternative
> solutions?
Here is a different solution:
http://okmij.org/ftp/Haskell/polyvariadic.html#polyvar-comp
f:: a1->a2-> .... ->cp (where cp is not a function type)
g:: cp->d
f `mcomp` g:: a1->a2-> .... ->d
Now that we know how to generically decide if a type is not a
functional type, mcomp can be defined fully generically, for any type
cp that is not a function. If there is interest, I can write that
code.
One particular application of the mcomp combinator is the prod combinator:
Given two functions,
f:: a1->a2->...->an->c |c,d non-exponential types
g:: b1->b2->...->bn->d
their product f `prod` g:: a1->a2->...->an->b1->b2->...->bn->(c,d)
The number of as and bs is arbitrary.
The definition of prod is very simple:
> prod = (. ((. (,)) . mcomp)) . mcomp
The web page
http://okmij.org/ftp/Haskell/polyvariadic.html#categorical-max3
gives a few explanations and further examples.
More information about the Haskell-Cafe
mailing list