2013-04-24 7 views
6

도 단위의 각도로 작업 할 때, 난 후위 연산자로 사용할 학위 기호 (°)를 정의하고 싶습니다.Haskell에서 후위 연산자를 어떻게 정의합니까?

let o = pi/180 

과 같이 사용 : 현재, 나는 (GHCi에서)이 줄을 사용

tan(11*o) 

을하지만 난 그냥 가고 싶은 : 더 명확

tan 11° 

이다. 학위 연산자는 'tan'및 다른 함수보다 우선해야합니다.

내가있어 가장 가까운입니다

let (°) x _ = x*pi/180 

은 다음과 같이 사용 :

tan(11°0) 

하지만 기본 우선 순위는 괄호가 여전히 필요 의미하며, 더미 번호,이 대안이다 현재 내가 사용하는 것보다 나쁘다.

+8

"차수 연산자는'tan' 및 다른 함수보다 우선해야합니다." <- 작동하지 않을 것이므로 함수 응용 프로그램이 언어 사양에 따라 우선 순위가 가장 높습니다. –

+0

각도를 나타내는 newtype을 사용하여 새로운 숫자 유형 (Double 또는 기타를 래핑하는 것)을 간단하게 정의하지 않는 이유는 무엇입니까? 물론 평등을 정의하고 싶다면 도의 "모듈화"성격에주의를 기울여야 만합니다. –

+0

하스켈은 글쓰기에 익숙한 방식으로 컴파일 할 수있는 언어가 아닙니다 그것. 펄이나 심지어 파이썬과는 달리, 하스켈의 중온 구문은 사실 아주 잘리고 단순합니다. 너무 단순하게 설계 되었기 때문에이 간단한 기초조차도 매우 효율적인 속기를 많이 사용하고 많은 괄호를 생략하고 일반적으로 일을 아주 가독성있게 만드는 것. 하지만 후자의 부분은 부분적으로는 엄격한 파싱 규칙이 있기 때문입니다. – leftaroundabout

답변

3

중온 연산자의 우선 순위를 변경할 수있는 fixity declarations을 확인하십시오. 우선 순위를 너무 높게 설정하지 않도록주의하십시오. 그렇지 않으면 다른 운영자가 예상대로 작동하지 않습니다. 예를 들어

:

infixl 7 ° 
(°) x _ = x*pi/180 

편집 : 아, @Daniel 피셔의 권리 - 기능의 응용 프로그램이 우선 순위가 가장 높은

11

당신은 할 수 있기 때문에이 현재의 요구에 대해 작동하지 않습니다, 적어도 하스켈에서는 보고서에 정의되어 있습니다. 그러나 a GHC extension that allows postfix operators이 있습니다.

불행히도 이것이 모든 것을 제공하지는 않습니다. 단항 부정 연산자가 자주하는 것처럼 특히 괄호가 필요합니다.

관련 문제