const#

Type signature for const:

const :: ∀ a b. a -> b -> a

The type signature tells us that const is a function that takes two fully polymorphic type parameters and always returns the first parameter, untouched.

const v1#

const :: ∀ a b. a -> b -> a
const x _ = x

const v2#

const :: ∀ a b. a -> b -> a
const = \x _ -> x

const v3#

f3 :: ∀ a b. a -> (b -> a)
f3 x = \_ -> x

const usage#

with filter#

r2 = filter (const true) [1, 2, 3, 4]

filter calls const true 1, then const true 2, etc. for each element of the array. const will always ignore the element, and only consider true (the first argument, since const always ignores the its second argument).

Observe that we partially apply const to true, so, each element of the list is in turn, passed as the remaining, “missing” (second) argument to const, which is promptly always ignored. The result is that the predicate is always satisfied and all elements are kept in the resulting array.