2015-07-18 10 views
5

Mam dokładnie taki sam problem jak opisany w pytaniu Re-export qualified?Zakwalifikowany reeksport - jak rozwiązać to rozwiązanie?

module Foo.A where 

foo = 42 

i

module Foo.B where 

foo = 12 

i chcesz napisać super moduł

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

import Foo.A 
import Foo.B 

który re-eksportu w tych modułach, zderzysz się z nazwą.

Zapytano mnie 5 lat temu, przypuszczam, że od tamtej pory mogło dojść do pewnych zmian. Czy były jakieś? Jeśli nie, nadal nie ma na to rozwiązania?

Ja robię nie za obiektyw do rozwiązania.

UPDATE:

Nie może być wiele funkcji foo w każdym module (foo1, foo2, etc) i chcę użyć je z obu modułów. W każdym module mogą być również dostępne nazwy z tymi samymi nazwami członków.

Ukrywanie nie jest rozwiązaniem.

+0

> W każdym module może być wiele funkcji (foo1, foo2, itp.) I chcę używać ich z obu modułów. W każdym module mogą być również dane z tymi samymi nazwami członków. Jeśli tak jest naprawdę i nie chcesz niczego ukrywać. Jedynym rozwiązaniem jest zaimportowanie obu zakwalifikowanych modułów, a nie próba utworzenia modułu AB eksportującego zarówno – mb14

+0

@ mb14, co dokładnie masz na myśli? –

+2

FWIW, wydaje mi się, że bardziej odpowiednie byłoby dodanie do starych pytań "aktualnych odpowiedzi są nieaktualne", niż zadawanie nowego pytania. – icktoofay

Odpowiedz

2

Nie ma rozwiązania nowe, ale nadal istnieje rozwiązanie. Po pierwsze, jako że tylko jeden foo może zostać wyeksportowany, musisz zdecydować, który z nich chcesz wyeksportować jako czysty foo. Następnie musisz ukryć i wymienić drugi.

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, to nie jest naprawdę eleganckie, ale to obejście, jeśli naprawdę musisz.

+0

** Po pierwsze, ponieważ tylko jeden foo może zostać wyeksportowany, musisz zdecydować, który z nich chcesz wyeksportować jako nagie foo ** - Chcę użyć obu i może być ich dużo. –

+0

Mam na myśli, że tylko jeden plik foo może zostać wyeksportowany jako nagi 'foo' (bez względu na język). Rozumiem, że chciałbyś "A.foo' i' B.foo', ale te dwa różne imiona i żadne z nich nie są nagim 'foo'. Więc możesz mieć jednego 'foo', ale drugie musi mieć inną nazwę (przykład' Bfoo' lub 'B_foo', ponieważ' B.foo' nie jest możliwy). – mb14

+0

To oczywiste. Ale pytanie brzmi: jak zaimportować ich wykwalifikowanych lub coś. –

Powiązane problemy