Haskell functions

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