haskellpointfreedot-operator

Dot operator in haskell with multi-parameter functions


I want to write a function point-free in haskell, to keep things simple lets say I want to make this function:

maxmin :: Ord a => a -> a -> a -> a
maxmin a b c = max a (min b c)

I can improve this to

maxmin a b = (max a) . (min b)

but is there any way to get rid of a and b?


Solution

  • I wouldn't say this is simplier but here you go:

    maxmin :: Ord a => a -> a -> a -> a                                             
    maxmin = (. min) . (.) . max 
    

    (Generated with pl tool from lambdabot http://www.haskell.org/haskellwiki/Pointfree)

    lambdabot> pl maxmin a b c = max a (min b c)
    maxmin = (. min) . (.) . max