람다 칼큘 꼴려서 겉핥기하려고
재귀함수 Y를 피보나치 예시로 보면서 따라가는 중인데
Y = λf.(λg.f (g g)) (λg.f (g g))
에서 이해하기 위해 각각의 함수들의 타입을 생각하고 있었음

피보나치의 경우
f는 (int->int) -> int -> int
g g는 int->int 인것은 쉽게 나왔는데

g하나의 타입이 좀 복잡함
나만 처음보는 걸 수도 있겠지만
그 타입을 x라 하면
x = x -> int -> int가 되서
x -> int -> int -> int -> int ...로 확장되던데

이렇게 자기 자신의 타입을 인자로 받는 함수 타입은 처음봐서
표기를 어떻게 하는지 궁금함

링크드 리스트나 트리가 그나마 .next나 .rchild 같은 거 했을 때 자기자신 타입 나오기는 하지만
걔네는 결과로 나오는 거라 타입에 이름 붙이고 그게 나올거야 하면 되는데
이건 조금 다르니까..

그냥 A타입에 .operator+(A) 하듯 그냥 이름짓고 하는게 똑같나?
x로 이름 짓고 하부에 x를 받으면 int->int를 내놓는 functor 느낌으로 만드는 거?