[Haskell-beginners] Argument order and partial function application

Brandon S Allbery KF8NH allbery at ece.cmu.edu
Thu Aug 19 19:13:56 EDT 2010


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 8/19/10 18:53 , Tom Murphy wrote:
>      I can see how I might be able to "hack" my way into accessing the
> "width" argument with infix functions, but there's no way at all that I can
> see to access the height. This seems arbitrary to me: my volumeFunction
> doesn't need them in the order they're given. Is there a way around this?
> Could I somehow combine three smaller functions?

volumeGivenLength, volumeGivenWeight, volumeGivenHeight: Int -> (Int -> Int
- -> Int)
- -- note that the above signature is the same as Int -> Int -> Int -> Int
volumeGivenLength = volumeFunction -- function taking w, h
volumeGivenWidth = flip volumeFunction -- function taking l, h
volumeGivenHeight = flip (flip . volumeFunction) -- function taking l, w

You can in general achieve any desired permutation of parameters, at the
expense of your sanity:

    <allbery_b> @pl \h -> \a b c d e f g -> foo a b c d e f g h
    <lambdabot> flip (flip . ((flip . ((flip . ((flip . ((flip . (flip .))
.)) .)) .)) .) . foo

- -- 
brandon s. allbery     [linux,solaris,freebsd,perl]      allbery at kf8nh.com
system administrator  [openafs,heimdal,too many hats]  allbery at ece.cmu.edu
electrical and computer engineering, carnegie mellon university      KF8NH
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.10 (Darwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkxturQACgkQIn7hlCsL25U/VACeKuMkrF9FkHnFmwPOGg8jEnCR
LsAAoKp7KX6e2CIuSPa0sORbtst3bXt+
=mNM2
-----END PGP SIGNATURE-----


More information about the Beginners mailing list