Posted on: 23 December, 2018
By Sab

## Writing a simple named function

``````sq :: Integer -> Integer
sq n = n * n
``````

`::` can be read as ‘has the type’. Here `sq` is the function name which takes an integer and returns an integer.

``````mul :: Integer -> Integer -> Integer
mul a b = a * b
``````

the first line is type signature, while this is useful, it is not required, as haskell compiler can infer the type automatically. Second line is the actual function definition, `=` is used to define the function

Haskell functions always take only one parameter, In this case it is to say the function `mul` takes one parameter and returns another function which take a Interger and return an Integer, The `->` is right associative, meaning the above function can be rewritten as below altough brackets are not necessary.

``````mul :: Integer -> (Integer -> Integer)
``````

The functions mul and sq can be written a lambda functions,

``````sq = \n -> n * n
mul = \a b -> a * b
``````

### calling a function

functions can be called as prefix notation or infix (not all functions can be represented as infix)

prefix example

``````mul 32 45
``````

infix example, backticks should be used when functions is used as infix

``````32 `mul` 45
``````

The infix functions like `+, -, *, /` etc, if used as prefix, they should be surrounded with brackets

``````(+) 3 4
``````