2017-11-02 23 views
3

GHC 8.2에 정의 된 fromRight 함수를 사용하는 코드가 있습니다. 하지만 fromRightGHC의 이전 버전에 대해서만 기능을 정의하는 방법은 무엇입니까?

이 가능하고 어떻게하면 내가에만 사용된다는 누락 된 정의 그래서

fromRight :: b -> Either a b -> b 
fromRight _ (Right b) = b 
fromRight b _   = b 

을 추가 궁금에 대한 Variable not in scope:에 대한 오류를 제공 GHC 8.0.2로 다운 그레이드 할 필요가 8.2.1보다 GHC 버전을 사용합니까?

답변

3

당신은 항상 fromRight는 서곡에 존재하지 않는 경우에도 유효합니다

import Prelude hiding (fromRight) 

를 작성할 수 있습니다. 따라서 이전 버전과 새 버전의 Prelude와 호환되는 모듈을 작성하려면 새로운 fromRight 함수를 무시하고 라이브러리에서 항상 사용하십시오.

5

일반적으로 라이브러리 기능에 대해 궁금한 점이 있다면 CPP를 사용해야합니다.

{-# language CPP #-} 

#if !MIN_VERSION_base (4,10,0) 
fromRight :: ... 
#endif 

MIN_VERSION_... 매크로는 Cabal에서 제공 했었지만, 이제 그들은 GHC에 의해 제공됩니다. 충분히 오래된 버전의 GHC에서 사용하려면 Cabal을 사용해야합니다 (cabal-install 또는 stack 사용). 당신이이 일의 문제로 이동하기 전에


, 당신을 위해 모든 일을 -compat로 끝나는 이름을 가진 여러 개의 패키지가 있습니다. 이 경우 base-compat 패키지에 의 fromRight을 사용할 수 있습니다. 그렇다면 충분히 새로운 라이브러리 인 base을 사용하고 있는지 신경 쓸 필요가 없습니다.