HPM Education - Haskell

Searchβ¦

Introduction

Types in Haskell

Defining Functions / Working with Functions

List Comprehensions

Higher-order Functions

Cutom Types

Interactive Programming

Functors, Applicatives and Monads

Curried Functions

Functions in Haskell are also free to **return functions** as their results. This brings us to **curried functions** which take in **one argument at a time **and **return a function** that takes in additional arguments. Actually, all functions in Haskell with multiple arguments are applied this way (unless explicitly stated otherwise) β the function is first applied to the first argument and returns another function that is then applied to the second argument and so on. Let's explore this with an example of a multiplication function that takes in three numbers and multiplies them:

ghci> multiply x y z = x * y * z

ghci> :t multiply

multiply :: Num a => a -> a -> a -> a

β

-- a -> a -> a -> a actually means:

Num a => a -> (a -> (a -> a))

That is,

`multiply`

takes the argument `x`

of type `a`

and returns another function that takes in the argument `y`

(also of type `a`

) and returns another function that takes in argument `z`

(also of type `a`

) that then returns the final result. To avoid unnecessary parentheses, the function arrow `->`

associates to the right by convention, while the function application associates to the left:multiply x y z

-- is actually:

((multiply x) y) z

Last modified 1yr ago

Copy link