2012-08-24 27 views
5

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 FooBar, 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?

+0

Chờ, sẽ không có xung đột nếu người dùng nhập cả hai mô-đun? –

+0

@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'. –

+0

WOW! Tính năng đó có sẵn trong bao lâu!?!?! Điều này thay đổi mọi thứ. –

Trả lời

0

Trừ khi tôi nghe bằng chứng ngược lại, câu trả lời có vẻ là: bạn không thể.

Các vấn đề liên quan