It looks like it is specified and the intended behavior:

From the report, section 5.2:

An algebraic datatype declared by a data or newtype declaration may be named in one of three ways:

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:

  1. 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@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@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe