
Derek Elkins
module Attribute where data Attribute = Attribute { key :: QualifiedName, value :: String }
+1 Assuming that the above definition is inside a file called Foo/Bar.hs and, syntactically, inside a "module Foo where", I think a sane way to search for the module Foo.Bar.Attribute is a) Foo.Bar.Attribute.hs b) Foo/Bar.Attribute.hs c) Foo/Bar/Attribute.hs d) Foo.Bar.hs:Attribute e) Foo/Bar.hs:Attribute ...I guess you see a pattern emerging. It's not entirely unlike public inner java classes[1] The reason that the Main module is an exception to the naming/placement rules is that it's _always_ the root of the search tree, which is only confusing if you insist on being confused by it[2]. Furthermore, if you import Foo.Bar , you get Attribute.(..) imported by default, _except_ if you also do import [qualified] Foo.Bar.Attribute [as A] This fixes both the insanity of having thousands of three-line modules in thousands of files (which noone wants to manage) and source directories consisting of more directories than files. [1]uhmm... can inner classes be public? I think I never tried... [2]like javac chooses to be. -- (c) this sig last receiving data processing entity. Inspect headers for copyright history. All rights reserved. Copying, hiring, renting, performance and/or quoting of this signature prohibited.