5
내 통제하에 있지 않은 라이브러리 모듈 Foo
이 가정 기능 :제어 문서화 유형 서명 재수출
module Foo (Foo, thing) where
data Foo = Foo Int
thing :: Foo
thing = Foo 3
지금 나는 Foo
에서 thing
을-수출 다시 내 자신의 라이브러리 모듈을 가지고 가정이 기준 치수. 호환성을 위해
module Bar (Foo.thing, getBar) where
import qualified Foo
type Bar = Foo.Foo
getBar :: Bar -> Int
getBar (Foo i) = i
, 내가하지 다른 thing
을 내보낼 않습니다. Foo.thing
을 내보내므로 사용자가 Foo
및 Bar
모듈을 모두 가져 오는 경우 해당 코드는 thing
이되며 이름 충돌은 발생하지 않습니다.
이제 우리는 Bar
을 사용하는 세 번째 모듈이 있다고 가정합니다.
module Main where
import Bar
세 번째를 ghci에로드합시다. 대신 ghci 및 모듈 Bar
에 thing
이 Foo.Foo
을 입력되었음을 나타내는 haddocks의
[1 of 3] Compiling Foo (Foo.hs, interpreted)
[2 of 3] Compiling Bar (Bar.hs, interpreted)
[3 of 3] Compiling Main (test.hs, interpreted)
Ok, modules loaded: Main, Bar, Foo.
ghci> :t thing
thing :: Foo.Foo
ghci> :t getBar
getBar :: Bar -> Int
ghci> getBar thing
3
ghci> :info Bar
type Bar = Foo.Foo -- Defined at Bar.hs:3:6-8
, 나는 그것이 thing
이 Bar
을 입력 가지고 있음을 명시하고 싶습니다. 다른 thing
을 내보내지 않고이 문제를 해결할 수있는 방법이 있습니까?
잠깐, 사용자가 두 모듈을 모두 가져 오면 충돌이 없습니까? –
@GabrielGonzalez 세 번째 파일에'import Foo'를 추가하고 직접보십시오! (둘 다 같은 *'물건 '을 수출하기 때문에 충돌이 없습니다.) 둘 다 수입 될 경우 ghci에게'Foo '보다'바'를 선호한다고 말할 것입니다. –
와우! 이 기능을 사용할 수있는 기간은 얼마입니까?!?! 이것은 모든 것을 바꿉니다. –