[Haskell-cafe] module export question

Ross Mellgren rmm-haskell at z.odi.ac
Tue Dec 1 17:26:22 EST 2009


It looks like it is specified and the intended behavior:

 From the report, section 5.2:

An algebraic datatype T declared by a data or newtype declaration may  
be named in one of three ways:
The form T names the type but not the constructors or field names. The  
ability to export a type without its constructors allows the  
construction of abstract datatypes (see Section 5.8).
The form T(c1,...,cn), names the type and some or all of its  
constructors and field names.
The abbreviated form T(..) names the type and all its constructors and  
field names that are currently in scope (whether qualified or not).

And then later similarly for imports from 5.3.1:

Exactly which entities are to be imported can be specified in one of  
the following three ways:

The imported entities can be specified explicitly by listing them in  
parentheses. Items in the list have the same form as those in export  
lists, except qualifiers are not permitted and the `module modid'  
entity is not permitted. When the(..) form of import is used for a  
type or class, the (..) refers to all of the constructors, methods, or  
field names exported from the module.
The list must name only entities exported by the imported module. The  
list may be empty, in which case nothing except the instances is  
imported.



-Ross

On Dec 1, 2009, at 5:18 PM, Luke Palmer wrote:

> On Tue, Dec 1, 2009 at 3:11 PM, Sean McLaughlin <seanmcl at gmail.com>  
> wrote:
>> Say I have the following module:
>>
>> ----------------------------------------
>> module A
>>  ( T(T)
>>  , t
>>  , val
>>  )
>> where
>>
>> data T = T { t :: Int }
>>
>> val :: T
>> val = T 7
>> ----------------------------------------
>>
>>
>> When I use A with the following imports, I don't expect this to work,
>> but it does:
>>
>> import qualified A
>> import A(T(..))
>>
>> main = putStrLn $ show $ t A.val
>>
>> The problem is that I explicitly didn't export 't' as an element of T
>> (by not writing T(..)).
>> Am I just misunderstanding how exports work?  I couldn't figure out
>> what the correct
>> behavior should be by looking at the 98 report.
>
> Oh interesting.  What a crazy corner case.  I also feel like your
> program shouldn't be valid.  Maybe it's a bug?
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091201/f34cb3bf/attachment.html


More information about the Haskell-Cafe mailing list