Some typos: 2 Lexical Structure: "import" shouldn't be a specialid (it's a Haskell 98 reserved word). 5.2 Bits, shift, rotate: replace last sentence to say that for unbounded types (e.g., Integer) rotate is equivalent to shift. 5.2 Bits, definition of bitSize: "have a have a" 5.3 Int and Word: "all type classes for which Int has an instance, this includes the class Bits" isn't right: it includes user-defined instances. I'd suggest "the class Bits and all type classes for which Int has an instance in the Haskell 98 Prelude and standard libraries". 5.5 ForeignPtr: last sentence of first para isn't quite right, as the finalizer is now in the foreign language. 5.5 newForeignPtr: the third sentence is missing some words, probably "is passed". 5.6 StablePtr, data StablePtr a: the 2nd and 3rd sentences aren't quite right: ForeignPtr a is no longer an instance of Storable, and nor is StablePtr a. (But if someone made it so, the behaviour would be perfectly well defined.) Better to drop these two sentences and just say it's not an instance of Storable. 5.8 MarshallAlloc, last para: missing "the" in the first sentence. Table 2: delete HsForeignPtr (not a basic foreign type) and a query: why are there conversions between StablePtr a and (Fun)Ptr a, and HsStablePtr constrained to (void *)?