In order to get a head start into the path of Haskell, I chose the book by one of its creators Hudak. So, I am going through the gentle introduction to Haskell.

I got stuck at trying to understand the following statement:

> 
> Technically speaking, formal parameters are also patterns but they never fail to match a value.
> 
> 
> 

From my little but relatively greater habituation with languages like C (or let's broadly say as non-functional languages), I could form that formal parameters are the arguments in the definition of a function. So, suppose there were a function like the following in C:

```
int func_add(int a, int d) 

```

then passing a value of some other type like string will be a failure in pattern matching if I am correct. So calling `func_add` as `func_add("trs", 5)` is a case of pattern mismatch.

With a heavy possibility of an incorrect understanding or interpretation this similar situation can occur very well in Haskell as well when a piece of code calls a function by passing arguments of different types. 

So, why is it said that in Haskell formal parameters are irrefutable pattern matching?