# Introduction

A functional program is set of rules that govern a specific output on providing an input. The basic operation in functional programming in composition of functions.

- function f(x) is represented as f x.
- Recursive defination:-

plus(n,m) == plus n m = summation of n and m

succ(m) == m + 1

plus n succ m == succ plus n m

# What is a function

In mathematics, a function f with domain S and codomain T can be represented as f: S -> T, where Range R of this function should be subset of codomain T. Similarly in Haskell we can define the function type, input type and output type, where **type** is a well defined set of certain permitted values.

# Haskell, a purely functional programming language

Simply put, Haskell is a programming language for defining functions.

It is two parts:-

- Type of the input and the output
- Rules for computing output from input

Type defination: `sqr :: Int -> Int`

Computation rule: `sqr x = x * x`

Haskell is a case-sensitive language.

Basic types in Haskell are:-

- Int
- Float
- Char
- Bool (True or False)

Boolean expressions- `&& || not < > == \= <= >=`

Sample: