하스켈 입문서를 읽다보면 모듈 Prelude
에 선언되어 있는 기본 함수나 데이터 타입을 직접 구현해보는 연습 문제가 있다.
이때 원래 있던 것과 이름이 같을 경우 충돌이 생기는데 이를 방지하기 위한 몇 가지 방법이 있다.
가장 흔하고 쉬울 것 같은 방법인데 같은 이름을 안 쓰면 된다.
예를 들어 함수 map
을 직접 구현하고 싶다면 이름 map
대신에 map'
을 쓰면 된다.
map' :: (a -> b) -> [a] -> [b]
두 번째 방법은 아래처럼 모듈 Prelude
를 import 할 때 특정 이름을 제외하는 것이다.
import Prelude hiding (map)
이렇게 하면 직접 map
을 구현해도 이름이 충돌하지 않을 것이다.
마지막 방법은 GHC 확장을 쓰는 것이다. NoImplicitPrelude
라는 확장을 쓰면 아예 모듈 Prelude
를 로드하지 않을 수 있는 것 같다.
소스 코드 제일 위에 아래처럼 적으면 된다.
{-# LANGUAGE NoImplicitPrelude #-}