2017-04-15 2 views
16

방금 ​​(<$>)infixl 4의 고정도를 나타냅니다. 어떻게 이럴 수있어?

(+1) <$> (/5) <$> [5,10] 분명히 왼쪽에서 오른쪽으로 작동합니다.

답변

18

아니요, <$>은 연결 상태로 남겨 둡니다.이 예에서도 마찬가지입니다. (+1) <$> (/5) <$> [5,10]((+1) <$> (/5)) <$> [5,10]으로 읽습니다. 이것은 (->) aFunctor 인스턴스가 기본적으로 기능 구성과 동일하기 때문에 작동합니다. fmap (+1) (/5)\x -> (x/5)+1과 동일합니다.이 경우에는 사용자가 생각하는 것과 동일한 결과를 얻을 수 있습니다 (예 : (+1) <$> ((+5) <$> [5,10])).

다소 혼란 스럽기 때문에 행에 여러 함수를 적용하려는 경우 일반 함수 작성 연산자 인 (+1) . (/5) <$> [5,10]을 사용하는 것이 더 읽기 쉽습니다.

+0

의미론이 중요하다면 (왼쪽과 오른쪽 연관성이 있는지, 실제로는 펑터 법칙을 만족하는지) 문제가되지 않습니다. 왼쪽 associaitity가 고의적 인 선택인지 궁금하다. 성능상의 이유로. 그것은 우연히 또는 이론에 의해 오류에 의해 그런 식으로 정의 될 수 있습니다. – chi

+2

@chi'(<$>)'이 올바른 연관성을 가졌다면'f <$> x <*> y' 스타일 패턴을 사용할 수 없습니다 (왜냐하면'(<*>)'도 올바른 연관성을 갖기 때문입니다. 그와 같은 괄호). 'f $ gx $ hy'와 같은 일을 할 수 있고'f (gx) (hy)'와 동등 할 것이기 때문에'($)'는 연관성을 잃어 버려야한다고 말하는 사람들이 있습니다 (그리고 저는 그것은'->'이 올바른 연관성을 갖는 방식과 대칭이 될 것입니다.) 당연히, 그것은 특혜에 진짜로 내린다. –

+0

@DavidYoung 아, 맞아. 고마워, 고마워. – chi

관련 문제