// 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