# Argument Selection Function

The argument selection function `λfirst.λsecond.first` accepts a function as an argument and returns a function which, when given an argument, returns the first argument.

``````// λfirst.λsecond.first
const selectFirst = x => y => x

const double = a => a * 2

const triple = a => a * 3

const applyDouble = selectFirst(double)
const applyTriple = applyDouble(triple)

applyTriple(3) // equals 6``````

Here's the same example with the second argument selected:

``````// λfirst.λsecond.second
const selectSecond = x => y => y

const double = a => a * 2

const triple = a => a * 3

const applyDouble = selectSecond(double)
const applyTriple = applyDouble(triple)

applyTriple(3) // equals 9``````

Argument selection can be built upon for further composition, allowing us to pair arguments in different ways such as the following pair function `λfirst.λsecond.λfunc.((func first) second)`, which applies the first argument to a provided function, and then the second argument to the result of that.

``````// λfirst.λsecond.λfunc.((func first) second)
const makePair = first => second => func => func(first)(second)

const double = a => a * 2

const triple = a => a * 3

const multiply = a => b => a * b

makePair(double(2))(triple(2))(multiply) // equals 24``````

The same in F# which is slighltly more concise:

``````// λfirst.λsecond.λfunc.((func first) second)
let makePair first second func = func first second

let double a = a * 2

let triple a = a * 3

let multiply a b = a * b

makePair (double 2) (triple 2) multiply // equals 24``````

Finally, some languages like F# have a function composition operator which make functions like the `makePair` one above brief and elegant.

``````let double a = a * 2

let triple a = a * 3

let multiply a b = a * b

let makePair = double >> triple >> multiply

makePair 2 2 // equals 24``````