1. 原為增修功能的外部函數界面 (Foreign Function Interface)
2. 階層模組 (Hierarchical modules) 改列入正式標準，
3. 新增 pattern guards 語法，
4. 拿掉了 n+k patterns.

### Pattern Guards

Pattern guards 早在 1997 年便由 Simon Peyton Jones 提議，後來在 GHC 中實作。GHC 使用手冊中舉的例子是這樣的：已知 `lookup` 的型別是 `Eq a ⇒ [(a,b)] → a → Maybe b`, 假設你需要用 `lookup` 函數查環境 `env` 兩次。如果任一次結果是 `Nothing`, 程式就傳回 `fail`. 如果用 `case`, 程式得寫成這樣：

``` clunky env var1 var2 = case lookup env var1 of Nothing -> fail Just val1 -> case lookup env var2 of Nothing -> fail Just val2 -> val1 + val2 ```

Pattern guards 讓我們可把程式寫成較清楚簡潔的形式：

``` clunky env var1 var2 | Just val1 <- lookup env var1, Just val2 <- lookup env var2 = val1 + val2 | otherwise = fail ```

### n+k Patterns

Miranda 時代沿襲下來的 `n+k` patterns 則一直充滿著爭議。下面的階層函數中，第二行左手邊便使用了一個 `n+k` pattern:

``` fact 0 = 1 fact (n + 1) = (n + 1) × fact n ```

Richard Bird 是 `n+k` pattern 的擁護者，Philip Wadler 似乎也支持。Graham Hutton 的教科書 Programming in Haskell 中用了 `n+k` pattern. 他們認為自然數本來就是由 0 和後繼函數 (1+) 做出的資料型別，把串列中的資料拿掉，就成了自然數。教學上，他們認為很難跟學生解釋為什麼可對串列做配對：

``` foldr f e [] = e foldr f e (x : xs) = f x (foldr f e xs) ```

``` foldN f e 0 = e foldN f e (1 + n) = f (foldN f e n) ```

1.4 The n+k Pattern Controversy

For technical reasons, many people feel that n+k patterns are an incongruous language design feature that should be eliminated from Haskell. On the other hand, they serve as a vehicle for teaching introductory programming, in particular recursion over natural numbers. Alternatives to n+k patterns have been explored, but are too premature to include in Haskell 98. Thus we decided to retain this feature at present but to discourage the use of n+k patterns by Haskell users --- see Section 3.17. This feature may be altered or removed in Haskell 2, and should be avoided. Implementors are encouraged to provide a mechanism for users to selectively enable or disable n+k patterns.