[ ghc-Bugs-999936 ] Wrong pat-match order for records

2004-07-29 Thread SourceForge.net
Bugs item #36, was opened at 2004-07-29 08:07
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detailatid=108032aid=36group_id=8032

Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Simon Peyton Jones (simonpj)
Assigned to: Nobody/Anonymous (nobody)
Summary: Wrong pat-match order for records

Initial Comment:
in section 3.17.2 case #6 of the haskell report

There is some confusing language in the report. 
Furthermore  there is
either a bug in ghc, or hugs, depending on which way 
you interpret it.

it says:

# Matching against a constructor using labeled fields is 
the same as
# matching ordinary constructor patterns except that 
the fields are
# matched in the order they are named in the field list. 
All fields
# listed must be declared by the constructor; fields may 
not be named
# more than once. Fields not named by the pattern are 
ignored (matched
# against _).

 If you interpret 'field list' to mean the order the fields 
appear in the
pattern then given the code below bar should be 
printed, as the 'b'
field is compared and fails so the a field is never 
matched against. 


If you interpret 'field list' to mean the order the fields 
were DECLARED
in, then this should equal _|_ as the 'a' field is matched 
first and is
undefined.

ghc seems to follow the second interpretation, hugs the 
first.
 
If the first is indeed the correct interpretation, (it is 
what I
thought) I don't see a trivial translation to dispose of 
fields, as
there is no easy way in Haskell98 to change the order of 
pattern matching
without rewriting everything as a big mess of nested 
cases. (i mean,
obviously it can be done, but the translation is harder 
than just
placing the patterns in the right slots and dropping the 
field names)


-- the code --
data Foo = Foo { a,b::Int }

au = Foo { a = undefined, b = 0 }

main = case au of 
Foo { b = 1, a = 0 } - print foo
_ - print bar


ghc = error: Prelue.undefined
hugs = bar


--

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detailatid=108032aid=36group_id=8032
___
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs


Re: Browsing RealWorld broken

2004-07-29 Thread Ralf Hinze
 Here is another one: the case for foreign declarations seems to miss
 in ghc/compiler/ghci/InteractiveUI.hs:showDecl:
 
  ./bin/ghci
___ ___ _
   / _ \ /\  /\/ __(_)
  / /_\// /_/ / /  | |  GHC Interactive, version 6.3, for Haskell 98.
 / /_\\/ __  / /___| |  http://www.haskell.org/ghc/
 \/\/ /_/\/|_|  Type :? for help.
 
 Loading package base ... linking ... done.
 Prelude :i GHC.Base.RealWorld
 *** Exception: ghci/InteractiveUI.hs:(505,0)-(555,49): Non-exhaustive patterns in 
 function showDecl

Well, it should be fairly obvious that you cannot
browse the real world.
___
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs