3. foldTree
foldTree :: (a -> [b] -> b) -> Tree a -> b foldTree f (Node x ts) = f x (map (foldTree f) ts)첫 번째 줄은 foldTree는 우측으로 정의된다임?
a는 [b]->b 이다?
[b]는 b의 배열(시퀀스, 혹은 벡터)이고?
그럼 아래에 있는 foldTree f는 뭐임?
3. foldTree
foldTree :: (a -> [b] -> b) -> Tree a -> b foldTree f (Node x ts) = f x (map (foldTree f) ts)첫 번째 줄은 foldTree는 우측으로 정의된다임?
a는 [b]->b 이다?
[b]는 b의 배열(시퀀스, 혹은 벡터)이고?
그럼 아래에 있는 foldTree f는 뭐임?
첫번째 줄은 foldTree 의 타입이 (a -> [b] -> b) -> Tree a -> b 라는 선언이고, -> 는 함수 타입임
이게 커링 때문에 읽기 힘들 수 있는데 a -> b -> c 는 a, b 타입의 인자 두개를 받아서 c 타입의 결과를 리턴하는 함수임.
[a] 는 a의 리스트가 맞음
둘째줄은 foldTree의 정의인데, 첫번째 인자는 f :: a -> [b] -> b, 두번째 인자는 t :: Tree a 임
그런데 t에 (Node x ts) 로 패턴매칭을 하면 저렇게 씀
두번째 줄에서 등호 오른쪽은 결과값임. f가 이인자 함수니까 f의 첫번째 인자로 x, 두번째 인자로 (map (foldTree f) ts) 를 준거
첫줄을 C++식으로 바꾸면 b foldTree(function<b(a, vector<a>)>, Tree<a>) 이렇게 함수 인자 타입을 정의한 거고 둘째 줄이 구현임