# Haskell Function Signature

Haskell

```
filter :: (a -> Bool) -> [a] -> [a]
```

This is saying:

`filter`

is the identifier of a function.`::`

is the type annotation.`(a -> Bool)`

is the first argument.`a`

means it can be any type. So this is saying: a function that takes an argument of type`a`

and return a`Boolean`

.`->`

is the type separator.`[a]`

is the second argument. A list of elements of type`a`

.`->`

another type separator, this time the return type of`filter`

.`[a]`

means a list of type`a`

.