summaryrefslogtreecommitdiff
path: root/ghc/compiler/NOTES
blob: d0332b11150ce20d27b3499629f704443a2b5cec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Notes June 99
~~~~~~~~~~~~~
* In nofib/spectral/mandel2/Main.check_radius, there's a call to (fromIntegral m), where
  m is defined at top level. The full-laziness pass doesn't catch this because by
  the time it runs, enough inlining has happened that it looks like
	case ccall ... of (# a,b #) -> ...
  and the full laziness pass doesn't float unboxed things.

* The same function is an excellent example of where liberate-case would be a win.

* Don't forget to try CSE

Interface files
~~~~~~~~~~~~~~~
* Don't need to pin a kind on the type variable in a interface class decl,
  because it'll be correctly re-inferred when we read it in.

* The double semicolon at the end of an interface-file signature is so that
  the lexer can run through the pragmas very fast when -O isn't being used.

* In export lists, T|(A,B) says that constructors A and B are exported, 
  but not the type T.  Similarly for classes.  
  We can't say T(T,A,B) and T(A,B) to export or not-export T respectively,
  because the type T might have a constructor T.