커리



2ebcc224eadc78ee3af698a518d604038d9933554f986890cf



커리는 위에있는 함수를 아래에 있는 함수로 바꿔주는거임

고차함수는 이것처럼 자신의 차수만큼 함수호출연산자를 연달아서 사용함


부분적용함수

고차함수를 차수를 줄여서 미리 사용할 수 있도록 하는거는 부분적용함수라고 부르는데

아래에 있는 add에 1을 넣으면 a에 1이 들어가고 b를 기다림


이거는 자스에서 클로저의 성질중에 하나인 메모이제이션인데

받은값이 있으면 값을 저장하고 기다림


이제 1을 넣은 놈을 add1이라고 이렇게 주면

2ebcc224eadc78ee3bf698a518d604032075e40b2d2cfdcb4631

3이 된다


이런방식은 보조함수를 만들어서 쓸 수 있다는 장점이 있다

보조함수는 가능한한 잘게 쪼개고

pipe나 compose를 통해 스까 쓰는게 주로 사용하는 방식이다


그런데 보조함수를 잘만들었어

그리고 pipe로 함수를 조합을 잘 했어

pipe(a, b, c, d) 가독성도 아주좋아


근데 여기서

중간에 함수진행을 멈추거나

에러처리를 해야하거나

프로미스가 전달될 경우에는 어떻게 해야할까?

그냥 떠오르는 생각은 

뒤에 전달될 모든 함수에다가 조건을 걸어주는거임


instanceof Promise인경우에 b,c,d 모든함수에서 분기해주거나

try catch로 에러를 잡았을때 리턴을 약속된 값을 받게해서 뒤에 b,c,d 함수들에서 그냥 리턴되게 하는거지


이런방법은 모든 함수의 구성에 영향을 미치고 존나 구린방법이라는걸 알 수 있을것이다

이걸 해결하려고 생긴게 모나드임

모나드를 쓰면 아주쉽게 함수를 안전하게 합성하고 원하는대로 조작할 수 있다