[Hat] Hat bug report: Ambiguous occurrence `List'
Fergus Henderson
fjh007 at galois.com
Tue Jun 29 21:33:09 EDT 2004
On 29-Jun-2004, Malcolm Wallace <Malcolm.Wallace at cs.york.ac.uk> wrote:
> Fergus Henderson <fjh007 at galois.com> writes:
>
> > This one can be reproduced with a simple one-liner, "(>>) = 42":
> >
> > bash$ cat Foo.hs
> > (>>) = 42
>
> Hmm, but isn't (>>) indeed defined in the Prelude?
Yes.
> So what is the expectation here?
This example should be allowed. hat-trans should generate a type-correct
translated Haskell program from it.
> Is it something to do with lazy reporting of name clashes?
Yes.
The name ">>" is defined in the Prelude, but this occurrence of ">>"
in Foo.hs is a definition, so it unambiguously refers to Main.>>,
not Prelude.>>.
The Haskell 98 report gives a similar example in section 5.5.2 "Name clashes",
using "sin" rather than ">>":
| For example, the following module is legal:
|
| module F where
|
| sin :: Float -> Float
| sin x = (x::Float)
|
| f x = Prelude.sin (F.sin x)
|
| The local declaration for sin is legal, even though the Prelude function sin is implicitly in scope.
| The references to Prelude.sin and F.sin must both be qualified to make
| it unambiguous which sin is meant. However, the unqualified name sin in
| the type signature in the first line of F unambiguously refers to the
| local declaration for sin.
--
Fergus J. Henderson | "I have always known that the pursuit
Galois Connections, Inc. | of excellence is a lethal habit"
Phone: +1 503 626 6616 | -- the last words of T. S. Garp.
More information about the Hat
mailing list