Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uses for Haskell id function

Which are the uses for id function in Haskell?

like image 637
fjsj Avatar asked Jun 28 '10 21:06

fjsj


People also ask

What is identity function used for?

Identity functions are mostly used to return the exact value of the arguments unchanged in a function. An identity function should not be confused with either a null function or an empty function. Here are the important properties of an identity function: The identity function is a real-valued linear function.

What are Haskell functions?

Advertisements. Functions play a major role in Haskell, as it is a functional programming language. Like other languages, Haskell does have its own functional definition and declaration. Function declaration consists of the function name and its argument list along with its output.

What is a higher order function in Haskell?

Definition. A higher-order function is a function that takes other functions as arguments or returns a function as result.

What is flip in Haskell?

Description: it evaluates the function flipping the order of arguments.


1 Answers

It's useful as an argument to higher order functions (functions which take functions as arguments), where you want some particular value left unchanged.

Example 1: Leave a value alone if it is in a Just, otherwise, return a default of 7.

Prelude Data.Maybe> :t maybe maybe :: b -> (a -> b) -> Maybe a -> b  Prelude Data.Maybe> maybe 7 id (Just 2) 2 

Example 2: building up a function via a fold:

Prelude Data.Maybe> :t foldr (.) id [(+2), (*7)] :: (Num a) => a -> a  Prelude Data.Maybe> let f = foldr (.) id [(+2), (*7)]  Prelude Data.Maybe> f 7 51 

We built a new function f by folding a list of functions together with (.), using id as the base case.

Example 3: the base case for functions as monoids (simplified).

instance Monoid (a -> a) where         mempty        = id         f `mappend` g = (f . g) 

Similar to our example with fold, functions can be treated as concatenable values, with id serving for the empty case, and (.) as append.

Example 4: a trivial hash function.

Data.HashTable> h <- new (==) id :: IO (HashTable Data.Int.Int32 Int)  Data.HashTable> insert h 7 2  Data.HashTable> Data.HashTable.lookup h 7 Just 2 

Hashtables require a hashing function. But what if your key is already hashed? Then pass the id function, to fill in as your hashing method, with zero performance overhead.

like image 54
Don Stewart Avatar answered Oct 20 '22 03:10

Don Stewart