Re: illegal export of lone data constructor

Ross Paterson <[email protected]>
Newsgroups gmane.comp.lang.haskell.hugs.bugs
Message-ID <[email protected]>
On Sat, Sep 13, 2003 at 04:57:34PM +0200, Andrew Frank wrote:
> i am moving fom the nov 99 to the nov 02 hugs.exe (under windows)
> when recompiling old files i find two problems which i do not understand:
> 
> i want to export (:) from the prelude because i do not use the standard
> prelude usually.
> 
> module XX ( (:), ....)
> does not work (it did before). now i get the error "illegal export of lone
> data constructor"
> i do not see any hint in the report (nov 99) that (:) cannot be exported.
> (it may be unusual, but not illegal?)

It's illegal all right: the list of things you can export (in 5.2) doesn't
include data constructors, unless inside data types, and even then not (:).
Hugs is now a bit closer to the Report.

> the goal is to export certain functions from the prelude (especially (:),
> which cannot be redefined) but not all of it. how can this be achieved?

In Haskell 98 it is neither possible nor necessary to export (:),
but Hugs incorrectly permits and requires the Prelude to export it.
(This is unlikely to be fixed soon.)  One possibility is:

module MyPrelude (module Prelude, foldr) where
import Prelude hiding (foldr)
foldr = "foo"

> (minor point:
> my report says that the prelude module is always available as qualified
> import (p. 71)
> the hugs now (2002) seem to require an explicite import qualified (after a
> import Prelude hiding (stuff))

I can't find that in my copy (which doesn't have page numbers) -- what
section is that?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.