Bugs item #1162965, was opened at 2005-03-14 12:54
Message generated for change (Comment added) made by simonpj
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1162965&group_id=8032
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Compiler (Type checker)
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Simon Peyton Jones (simonpj)
Assigned to: Simon Peyton Jones (simonpj)
Summary: Exponential behaviour with type synonyms
Initial Comment:
You're quite right. GHC has a simple but non-
performant representation of type synonyms in types, so
as to be able to generate good error messages, In
particular, the type
S t
where S is a type synonym defined by 'type S a = s', is
represented as
SynNote (S t) (s [t/a])
That is, (S t) is represented by *both* its un-expanded
and expanded form.
The SynNote is ignored by unification, but the un-
expanded form is useful for error messages.
Unfortunately, t is duplicated, as you can see, and that
leads to the behaviour you describe.
I don't see myself fixing this soon, at least partly
because I can't see an obvious way to fix it that doesn't
lose error message behaviour.
I'm going to open a SourceForge bug for it. If anyone
has good ideas, let me know.
Simon
| -----Original Message-----
| From: [EMAIL PROTECTED]
[mailto:glasgow-haskell-bugs-
| [EMAIL PROTECTED] On Behalf Of Iavor Diatchki
| Sent: 17 February 2005 01:27
| To: [email protected]
| Subject: 'type' declarations
|
| hello,
| ghc seems to be having trouble with 'type' declarations.
| while compiling (i guess kind checking is the correct
word here)
| the following program for a very long time, ghc (6.2)
runs out of 300Mb of heap.
|
| module Test where
|
| type S = Maybe
| type S2 n = S (S n)
| type S4 n = S2 (S2 n)
| type S8 n = S4 (S4 n)
| type S16 n = S8 (S8 n)
| type S32 n = S16 (S16 n)
|
| type N64 n = S32 (S32 n)
|
| type N64' =
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| S ( S ( S ( S ( S ( S ( S ( S (
| Int
| ))))))))
| ))))))))
| ))))))))
| ))))))))
| ))))))))
| ))))))))
| ))))))))
| ))))))))
|
| if i remove the N64 definition things work. i guess
something
| exponential is happening
| (substitution?).
|
| -iavor
----------------------------------------------------------------------
>Comment By: Simon Peyton Jones (simonpj)
Date: 2005-11-21 11:28
Message:
Logged In: YES
user_id=50165
I've fixed the exponential behaviour arising from synonyms
being held in both expanded and unexpanded form. The test
is tc199.hs.
However, this SourceForge bug has a type that genuinely is
exponential in the program size, so it remains un-fixed.
Simon
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=108032&aid=1162965&group_id=8032
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs