| 5 | | * CONSTR - constructors |
| 6 | | * THUNK - thunks (courtesy of being a lazy language) |
| 7 | | * FUN - functions |
| 8 | | * IND - indirections - what is left behind after thunk evalution since we dont know who all would be referring to the thunk. |
| 9 | | * TSO - thread state object - see discussion at CapabilitiesAndScheduling |
| 10 | | * PAP - partial application - a function onject to which only some arguements have been applied. |
| 11 | | |
| 12 | | |
| 13 | | = Backward Pointers = |
| 14 | | |
| 15 | | Backwards pointers are the cause of much heartache in writing generational GCs. They are essential pointer from older generations to newer ones. If you think about it, such a thing should never really occur in a pure functional langauge since objects cannot be updated once created. While that is true in essence, backward pointers do arise in Haskell in the following cases |
| 16 | | |
| 17 | | * Thunk updation |
| 18 | | * Unsafe pointer updation |
| 19 | | * GHC.Prim |
| 20 | | * usafePerformIO : Haskell.IO.Unsafe |