返回文章列表

文章

Get Programming with Haskell-11

本节将介绍 Haskell 最强大的特性之一——其健全的类型系统

目录
  1. 2. 函数类型
  2. 1.字符串转换函数
  3. 2. 多个参数的函数
  4. 3.一等函数(First-class Functions)的类型
  5. 4. Summary
  6. 📎 参考文章
# 类型基础 ## 1. Haskell中的类型 Haskell 作为一门静态类型语言,或许会令你稍感意外。常见的静态类型语言还包括 C++、C# 和 Java。在这些语言(以及大多数静态类型语言)中,程序员往往需要费心维护类型标注。然而在 Haskell 中,你至今都无需为任何值显式声明类型——这得益于 Haskell 的类型推断机制:编译器能根据值的使用方式,在编译期自动推导所有值的类型!当然,你也可以选择手动指定类型。如下图所示,我们将为变量显式标注 Int 类型。 ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/2ec1765d-d2bd-4349-81c8-31046358363a/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466TCBIA2HJ%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T223651Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECYaCXVzLXdlc3QtMiJHMEUCIQDoSxf%2FLe8Pdxp%2Bzlzxm8tNfC7sbeyz9VKtsSob5iOClQIgHdFMZp99tMOGzTWO5i0jP9kaxNkFQdhYCX7Q%2BJF%2BdFkqiAQI7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDKCe8jkIzR9Y1GtAnyrcA7rNeg1U6mKWF2E%2BD8YGuMmrB4fjhU2mlkrWfgsko1p0m%2FTpTz8a3ADt2JtpKAYjziD0%2FwhgCT7edD%2F63VGnEynViYWfYGpdCYyxDI5ofvIziGPcUNRNUGyZFGk%2FjGLj5tE3vEZhO4nmp7UXoLcA4ZNPo6LwOOAQP4WuyELzmDn0ypZPgwXSeca2ft7ZrpAILgqxN3gceYe5c7340j1XUkh13o6Qgs9FHiwo2uwO%2F310FjMuzgyxjJyAQ8RzF103CwgTmsvSSBbPvd16qrSDQ9XJ1LYOcMqbdQhbyBbhX8TEMxZCOu1RMGlaqjpOUx8cTvTUEDbmacoXg%2FGvX2vOPbF0%2BL8hWJ04LlxtR6VursQyqNEmomgG5l5txx5JnNlDf5ndMZHSr%2BpHNscXcTa%2FsQfaFsor7YHzfGS1UeCDklttTZSGi2avlIdEu%2BHyVQDiIt9tJF8gn1i6DqkE5yWzBfgKUf5ZXYSqYo%2BH%2FYjPPyc8t6s%2BikB4Ao%2FxCauoD6rWUS3qqDiJswj9Q5XL8zKLCLUvmWrluUcpJ4LD5GCUeb7GhmkI5CTzus4m3E4mXGsUEMuwguEPCR9Sbanngj4Bo9eQULgQeaVdB%2BHfplm5uxgqy31I6Hi9STGn23AqMMS8ytYGOqUBPjd5GL6tAk7k%2BEbNCEKz1EPYnzLKGg16hPSbuz4xcFQrW7esaRewxqPgFMDp0QRtbsUQtVB6i%2BbaIlnEoGbMuB39qM5gT7ED7VXYUNqg%2FTKKsCk4Aonmq4XAqYCSXS33meMM9UmZGV5eb4bTVDnDQ1cO9jp3%2Bbcdl0UNj3PpcpfXTUqgyu5O%2FSq9jxwQ5bD7NuiOLjYKJmAfCOjYPGtEGX0QGG50&X-Amz-Signature=76fec1cf88aecb71a250ef0ba5462bc4f3cc85dc14c1f2c860c8c8d0e43c553a&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1d85c571-bb7d-80a7-beb0-e7e5e0f794c1.4b1b167f-4b52-4031-8233-f4f2689af574) Haskell 中所有类型名均以大写字母开头(函数名则需小写字母或下划线开头),以此实现语法区分。Int 类型作为编程领域最基础的数字类型之一,其本质是通过固定位数(通常为 32 位或 64 位)的二进制模式来表示数值。这种固定位宽的特性,决定了该类型存在数值表示范围的上下限。例如在 GHCi 中加载变量 x 后,通过简单运算即可探查该类型的边界值: ```haskell x :: Int x = 2 ``` ![](https://prod-files-secure.s3.us-west-2.amazonaws.com/4b1b167f-4b52-4031-8233-f4f2689af574/898d9d9d-57fe-4a4a-9962-4ef025895d13/image.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466TCBIA2HJ%2F20261016%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20261016T223651Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjECYaCXVzLXdlc3QtMiJHMEUCIQDoSxf%2FLe8Pdxp%2Bzlzxm8tNfC7sbeyz9VKtsSob5iOClQIgHdFMZp99tMOGzTWO5i0jP9kaxNkFQdhYCX7Q%2BJF%2BdFkqiAQI7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDKCe8jkIzR9Y1GtAnyrcA7rNeg1U6mKWF2E%2BD8YGuMmrB4fjhU2mlkrWfgsko1p0m%2FTpTz8a3ADt2JtpKAYjziD0%2FwhgCT7edD%2F63VGnEynViYWfYGpdCYyxDI5ofvIziGPcUNRNUGyZFGk%2FjGLj5tE3vEZhO4nmp7UXoLcA4ZNPo6LwOOAQP4WuyELzmDn0ypZPgwXSeca2ft7ZrpAILgqxN3gceYe5c7340j1XUkh13o6Qgs9FHiwo2uwO%2F310FjMuzgyxjJyAQ8RzF103CwgTmsvSSBbPvd16qrSDQ9XJ1LYOcMqbdQhbyBbhX8TEMxZCOu1RMGlaqjpOUx8cTvTUEDbmacoXg%2FGvX2vOPbF0%2BL8hWJ04LlxtR6VursQyqNEmomgG5l5txx5JnNlDf5ndMZHSr%2BpHNscXcTa%2FsQfaFsor7YHzfGS1UeCDklttTZSGi2avlIdEu%2BHyVQDiIt9tJF8gn1i6DqkE5yWzBfgKUf5ZXYSqYo%2BH%2FYjPPyc8t6s%2BikB4Ao%2FxCauoD6rWUS3qqDiJswj9Q5XL8zKLCLUvmWrluUcpJ4LD5GCUeb7GhmkI5CTzus4m3E4mXGsUEMuwguEPCR9Sbanngj4Bo9eQULgQeaVdB%2BHfplm5uxgqy31I6Hi9STGn23AqMMS8ytYGOqUBPjd5GL6tAk7k%2BEbNCEKz1EPYnzLKGg16hPSbuz4xcFQrW7esaRewxqPgFMDp0QRtbsUQtVB6i%2BbaIlnEoGbMuB39qM5gT7ED7VXYUNqg%2FTKKsCk4Aonmq4XAqYCSXS33meMM9UmZGV5eb4bTVDnDQ1cO9jp3%2Bbcdl0UNj3PpcpfXTUqgyu5O%2FSq9jxwQ5bD7NuiOLjYKJmAfCOjYPGtEGX0QGG50&X-Amz-Signature=47302afdf6eb0f50edb81ddfd753f280d30ae56f52ed328f93110b74317f1147&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject#notion_record=block.1d85c571-bb7d-80a9-bfbc-dbee96f2e85d.4b1b167f-4b52-4031-8233-f4f2689af574)