2011-11-06 2 views
5

하나의 파일에서 필자는 정규 prelude (++) 연산자를 사용해야하며 (++)에 대한 고유 한 동작을 구현하기를 원합니다. 나는 나의 파일의 맨 위에 import Prelude hiding (++)을 사용했고, 내 자신의 (++) 연산자를 정의했다. 그리고 이제 나는 그 아래에있는 정규 prelude (++)를 참조하기 바란다. 이것을 어떻게 성취합니까?Haskell Prelude 숨어, UNDO?

답변

14

쓰기뿐만 아니라

import qualified Prelude 

import Prelude hiding ((++)) 
코드의 시작 부분에

, 당신은 서곡에 ++을 필요로하는 곳에 Prelude.++ 쓰기

합니다.

4

Tsuyoshi Ito가 설명했듯이 모듈 이름으로 연산자를 한정 할 수 있습니다. 그러나 자신의 버전 인 (++)을 정의함으로써 프로그램의 가독성을 높이고 자 할 때 나중에 모듈 이름을 사용하여 운영자를 인증하는 것이 이상한 방법으로 보입니다.

"abc" Prelude.++ "def" 이제 ugly입니다.

<++> 또는`append`와 같은 중위 함수와 같은 새 연산자를 만드는 것이 왜 좋지 않습니까?

+3

그래, 실제로 질문에 대한 나의 첫 번째 반응은 "내가 함수를 게시하지는 않았지만 함수의 이름을'(++)'로 지정하지 않았습니다. 그러나 만약 묻는 사람이 Prelude에서'++ '를 대체 할'++'를 가진 라이브러리를 작성한다면, 라이브러리의 사용자는 이상적으로'Prelude. ++'를 사용할 필요가 없을 것입니다. 그런 (희귀 한) 경우, 같은 이름을 가진 함수를 정의하는 것이 합리적입니다. 그렇지 않으면 너무 널리 퍼진 이름 충돌을 일으키는 것은 거의 의미가 없습니다. –

+1

특히 사람들이 동기 부여에 관한 충분한 정보를 제공하지 않을 때 사람들이 "하지 마라"라는 질문과 대답을 읽은 후 나를 괴롭히기 시작합니다. 탐험가들이 탐험하게하고, 그들이 옳다고 생각하는 것을 시도하게하고, 그들이 할 때 그것이 얼마나 추악한지를 직접 보게하십시오. 머지 않아 그들은 저들의 대답에이 논평을 쓸 수있는 입장에 서게 될 것이다. :-) – luqui