Haskell Bind


### Why
외부상태의 타입을 `State` , 함수 `f`와 `g`가 있다면 다음처럼 나타낼 수 있다.
(`a`와 `b`는 또다른 결과값)
```typef:: State -> (a, State)g:: State -> (b, State)```
그런데, 함수를 합성(`g(f(x))`)해야 할 일이 생긴다면??
`f`의 출력과 `g`의 입력이 맞지 않는다.
이 해결방안이 바로 바인드 연산자(`>>=`)


### Definition
****바인드(bind) 연산자 >>=****
```type(>>=):: M a -> (a -> M b) -> M b```
- `M<a>`타입의 생성자가 있을 때.
- `a` 타입의 값을 받고, `M<b>`타입을 반환하는 함수를 받아
- `M<b>`타입의 값을 반환한다.
서로 다른 타입인 `a` 와 `b`를 **결합**할 수 있게 만들어 주는 것



### Usage
Why를 해결하는 합성함수
합성함수를 다른 관점에서 살펴보면 `State`값이 `f`와 `g`함수를 '**연속적**'으로 거친 것이라 생각할수도 있는데 Chaining이라 부른다.



> [간단한 모나드 설명과 예제](https://black7375.tistory.com/69)





