../

// Rank-N类型的简单例子
#import "/template.typ": *

#doc-template(
title: "Rank-N类型的简单例子",
date: "2025年3月29日",
body: [

考虑一段简单的代码:

```hs
highOrderFunc :: (Num b) => ([a] -> b) -> b
highOrderFunc f = f [1,2,3] + f ["a", "b", "c"]

main = do print $ highOrderFunc length
```

这里是无法通过编译的。

`highOrderFunc`的类型完整写出来实际上是:

```hs
highOrderFunc :: forall a b. (Num b) => ([a] -> b) -> b
```

对于一个`highOrderFunc`函数的实例,`a`只能是一个确定的类型,比如`St


Email: i (at) mistivia (dot) com