2011-02-02 4 views
2

F #에서 일하면서 하스켈에 대해 알게되었습니다. 나는 현재 제 7 장인 this 튜토리얼을 강력히 추천합니다. 빠른 질문. 아마도 나 자신보다 앞섰고 앞으로의 장에서 대답을 찾을 수있을 것이다. 그러나 함수의 위치를 ​​뒤집을 수있는 방법이 있으며 함수가 F #처럼 하나의 인수 만 취하는 경우 인수가된다. 그래서, 예를 들어, F #으로 당신이 (당신이 하스켈에서처럼), 다음을 수행 할 수 digitToInt라는 함수가 있다면 :haskell 리디렉션

3 | 내가 틱 다시 사용하는 방법에 대해> digitToInt

,하지만 그건 특히 바이너리 기능을 위해 단항 함수와 비슷한 것이 있습니까? 이 작업을 수행하는

+2

표준 라이브러리에는 왼쪽에서 오른쪽으로의 응용 프로그램 연산자가 없습니다. 그러나,'Control.Arrow'는 왼쪽에서 오른쪽으로 _composition_처럼 행동 할 수있는'(>>>)'을 정의합니다. 그 외에는, peoro의 대답을 참조하십시오. 하스켈 문화권의 컨벤션은 데이터 흐름이 위에서 아래로, 오른쪽에서 왼쪽으로 진행되도록하는 것이므로 익숙해지면 가장 좋습니다. – luqui

+0

차가워졌습니다. 호기심이 많지만 유익합니다. 감사. – Ramy

+5

F #의 "왼쪽에서 오른쪽으로"타입 추론으로 인해 F # 코드에서 |>가 널리 사용된다는 점에 유의하십시오. (그래서 때때로> |를 사용하거나 컴파일 할 때 코드에서 타입을 명시해야합니다. 이것은 하스켈의 경우가 아니므로 (.)와 ($) 만 있으면됩니다. –

답변

8

한 가지 방법은이 같은 값을 통과하는 중위 함수 값을 (|>) 및 기능을 정의하고 함수를 호출 할 수 있습니다 :처럼 정확히

(|>) :: a -> (a -> b) -> b 
(|>) x f = f x 

그런 다음 당신이 그것을 사용할 수 있습니다 당신의 예 :

+8

즉,'(|>) = flip ($)' –

+0

예. 일단 내 질문을 단어에 넣으면 플립이 그 질문에 연루 될 수 있는지 궁금해졌습니다. – Ramy

1

하스켈에는 표준 연산자가 있다고 생각하지 않지만 분명히 정의 할 수 있습니다. 다소 관련된 개념은 일련의 응용 프로그램을 작성할 때 괄호를 제거 할 수있는 $ 연산자입니다 (이것은 F #에서 |>을 사용하는 한 가지 이유입니다).

f $ g $ h x = f (g (h x)) 

가 BTW : 하스켈에서이 같은 일을 알아내는 환상적인 방법은 Hoogle을 사용하는 것입니다 차이는 $이 순서를 반대로하지 않습니다. 예를 들어 :

5

당신은 peoro이 시사하는 일을 할 수 있으며, 그것은 잘 작동합니다. 그러나, 나는 그것을 반대 충고합니다. 하스켈을 읽는 정상적인 방법은 왼쪽에서 오른쪽의 문장과 같습니다. 처음에는 동사를, 끝에는 제목을 사용합니다. 일반적으로 f . g. q . r $ x과 같은 체인 구성이 있습니다. 모나드 사업자의 경우 f =<< g =<< x (또는 (f <=< g) =<< x)을 받고 신청자와 함께 f <$> x <*> y <*> z을 얻습니다. 그래서 사물의 정상적인 순서를 바꾸는 것이 반드시 관용적 인 것은 아닙니다.

필자가 들었던 이유는 F #이 반대 연산자를 선택한 이유는 visualstudio 자동 완성과 함께 매우 잘 작동한다는 것입니다. 사용자가 조작중인 값을 입력했다면 그것의 유형은 그것에 작용할 수있는 것에 대한 선택을 결정할 수있다. 그런 종류의 툴링 지원은 대단합니다. 대체 스타일을 채택하는 것이 좋은 주장 일 수 있습니다.