2015-07-18 16 views
5

tôi có chính xác cùng một vấn đề như mô tả trong câu hỏi này Re-export qualified?Tái xuất đủ điều kiện - cách giải quyết nó ngày nay, bất kỳ giải pháp nào?

module Foo.A where 

foo = 42 

module Foo.B where 

foo = 12 

và bạn muốn viết một module siêu

module Foo (
     module Foo.A 
    , module Foo.B 
    ) where 

import Foo.A 
import Foo.B 

mà-xuất khẩu lại các mô-đun đó, bạn sẽ nhận được xung đột tên.

Đã hỏi 5 năm trước, tôi cho rằng có thể đã có một số thay đổi kể từ đó. Đã có bất kỳ? Nếu không, vẫn không có giải pháp cho điều đó?

Tôi làm không xem xét Lens để giải quyết.

CẬP NHẬT:

Có thể có rất nhiều các chức năng foo trong mỗi module (foo1, foo2, vv) và tôi muốn sử dụng chúng từ cả hai mô-đun. Tuy nhiên, cũng có thể có data s có cùng tên thành viên trong mỗi mô-đun.

Vì vậy, ẩn không phải là giải pháp.

+0

> Có thể có nhiều chức năng foo trong mỗi mô-đun (foo1, foo2, v.v.) và tôi muốn sử dụng chúng từ cả hai mô-đun. Cũng có thể có dữ liệu với cùng tên thành viên trong mỗi mô-đun. Nếu nó thực sự là trường hợp và bạn không muốn che giấu bất cứ điều gì. Giải pháp duy nhất là nhập cả hai mô-đun đủ điều kiện và không cố gắng tạo mô-đun AB xuất cả hai số – mb14

+0

@ mb14, bạn có ý nghĩa gì? –

+2

FWIW, tôi cảm thấy sẽ thích hợp hơn nếu thêm câu trả lời “câu trả lời hiện tại là lỗi thời” vào câu hỏi cũ hơn là đặt câu hỏi mới. – icktoofay

Trả lời

2

Không có giải pháp mới, nhưng vẫn còn một giải pháp. Trước tiên, bạn chỉ có thể xuất khẩu foo bạn phải quyết định bạn muốn xuất loại nào là số foo. Sau đó, bạn chỉ cần ẩn và bí danh người khác.

module Foo (
    module Foo.A 
, module Foo.B 
, bFoo 
) where 

import Foo.A 
import Foo.B hiding (foo) 
import qualified B as B 

bFoo = B.foo 

Ok, nó không thực sự thanh lịch nhưng đó là cách giải quyết nếu bạn thực sự phải làm vậy.

+0

** Đầu tiên bạn, vì chỉ có một foo có thể được xuất khẩu, bạn phải quyết định cái nào bạn muốn xuất dưới dạng foo ** trần - tôi muốn sử dụng cả hai và có thể có rất nhiều chúng. –

+0

Tôi có nghĩa là chỉ có một foo có thể được xuất khẩu như trần 'foo' (bất kể ngôn ngữ). Tôi hiểu rằng bạn muốn 'A.foo' và' B.foo' nhưng hai cái tên khác nhau và không có cái nào trong số đó là 'foo'. Vì vậy, bạn có thể có một 'foo' nhưng khác cần phải có một tên khác (ví dụ' Bfoo' hoặc 'B_foo' là' B.foo' là không thể). – mb14

+0

Điều đó hiển nhiên. Nhưng câu hỏi là làm thế nào để nhập khẩu chúng đủ điều kiện hoặc một cái gì đó. –

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