Giả sử có một module thư viện Foo
mà không phải là dưới sự kiểm soát của tôi:kiểm soát tài liệu kiểu chữ ký của người tái xuất khẩu chức năng
module Foo (Foo, thing) where
data Foo = Foo Int
thing :: Foo
thing = Foo 3
Bây giờ giả sử tôi có mô-đun thư viện của riêng tôi, mà lại xuất khẩu thing
từ Foo
mô-đun.
module Bar (Foo.thing, getBar) where
import qualified Foo
type Bar = Foo.Foo
getBar :: Bar -> Int
getBar (Foo i) = i
Đối với lý do tương thích, tôi làm không muốn xuất một khác nhau thing
. Tôi muốn chắc chắn rằng tôi xuất khẩu Foo.thing
, để nếu người dùng nhập cả hai mô-đun Foo
và Bar
, họ sẽ nhận được cùng một thing
và sẽ không có xung đột tên.
Bây giờ giả sử chúng tôi có mô-đun thứ ba sử dụng Bar
.
module Main where
import Bar
Hãy tải thứ ba vào ghci.
[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
Thay vì ghci và haddocks chỉ ra rằng thing
trong mô-đun Bar
có kiểu Foo.Foo
, tôi muốn nó nói rằng thing
có kiểu Bar
. Có cách nào để thực hiện điều này xảy ra mà không xuất khác nhau thing
?
Chờ, sẽ không có xung đột nếu người dùng nhập cả hai mô-đun? –
@GabrielGonzalez thử thêm 'nhập Foo' vào tập tin thứ ba và tự mình xem! (không có xung đột vì cả hai đều xuất * cùng 'điều'.) Trong trường hợp cả hai đều được nhập, tôi sẽ * vẫn * muốn nói với ghci thích' Bar' hơn 'Foo'. –
WOW! Tính năng đó có sẵn trong bao lâu!?!?! Điều này thay đổi mọi thứ. –