2016-08-31 5 views
0

고차 함수의 기능을 '실행의 순서는 다음

routes = [... 
      ("graph-fb", seeOther redirectUrlGraphEmail $ toResponse ""), 
      ("post-fb", seeOther redirectUrlGraphPost $ toResponse ""), 
      ...] 

를 포함 질문입니다 : 때 이 함수를 호출하여 각 튜플에 dir을 적용하면 에 b이라는 함수가 먼저 반환되고 함수는 seeOther redirectUrlGraphEmail 또는 seeOther redirectUrlGraphEmail $ toResponse ""입니까?

+3

왜 중요한가요? 'map'의 타입에서 알 수 있듯이'dir'은 어떤 순서로 전달되는지에 따라 다르게 행동 할 수 없습니다. 이것은 단지 수사학적인 질문이 아닙니다. 당신이 왜 그것이 중요하다고 생각하는지 말하면 의심이갑니다. 하스켈에 관해 우리가 당신을 위해 정리해 줄 수있는 혼란을 드러 낼 것입니다. –

+0

'routes'는 함수가 아닙니다. 그것은 목록입니다. – dfeuer

+0

@dfeuer에게 언급 해 주셔서 감사합니다. 나는 이미이 문제를 해결했다. –

답변

2

튜플 항목 graph-fb 대한 예에

a == "graph-fb" 
b == seeOther redirectUrlGraphEmail $ toResponse "" 

제 1 함수 호출 toResponse "" 것 해결하는 것을 의미하고, 그 제 2 파라미터로 seeOther에 공급 될 , 의해 분리된다. 그 결과 맵핑 기능 안에 b 레이블이 생깁니다.

+0

당신이 말한 것을 이해 합니다만,'$'가 haskell에서 우선 순위가 낮아서'seeOther'가'redirectUrlGraphEmail'을 먼저 호출하게됩니까? –

+0

'$ '는 다른 삽입 연산자에 비해 우선 순위가 가장 낮습니다. 쉼표의 오른쪽에있는 전체 비트는 하나의 중온 연산자 만 포함하므로 매핑 기능에서 "번들로 묶어"b라는 레이블이 붙습니다. –

0

코드에서 알 수있는 방법이 없습니다. 컴파일러가 다양한 방식으로 프로그램을 재구성 할 수있는 자유를 무시하더라도 Haskell 평가에 대한 일반적인 접근법은 게으르며, 이는 수요 중심의, case- 구동 및 (궁극적으로) I/O 중심으로 생각할 수 있습니다. 실제로 결과를 검사하는 사람은 평가 순서를 결정합니다.