一看就懂的 Haskell 教程 - 标准库类型类

一、Haskell标准库类型类的官方查阅渠道

Haskell标准库的类型类主要集中在 base 包中,以下是获取完整类型类清单的权威途径:

1. 官方文档(最全面)

  • 核心入口Haskell base 包文档(选择对应版本,如base-4.19.0.0,这是GHC 9.8的默认版本);

  • 分类导航:点击文档中的「Modules」,核心类型类分布在以下模块中:

    模块名 核心类型类 用途
    Prelude Eq、Ord、Show、Read、Num、Functor、Monad等 预加载核心类型类(无需导入)
    Data.Eq Eq 相等性判断
    Data.Ord Ord、Ordering 大小比较
    Data.Foldable Foldable 可折叠容器(遍历/聚合)
    Data.Traversable Traversable 可遍历容器(带副作用映射)
    Control.Monad Monad、MonadPlus、MonadIO等 单子(顺序计算)
    Control.Applicative Applicative、Alternative 应用函子(多参数映射)
    Data.Functor Functor、Contravariant 函子(单参数映射)
    Numeric.Num Num、Fractional、Integral等 数值运算
    Data.Semigroup Semigroup 半群(结合律二元操作)
    Data.Monoid Monoid 幺半群(半群+单位元)

2. GHCi交互式查询

在GHCi中可直接查询类型类的定义、实例和文档:

less 复制代码
-- 1. 查看类型类的定义(如Functor)
ghci> :info Functor
class Functor (f :: * -> *) where
  fmap :: (a -> b) -> f a -> f b
  (<$) :: a -> f b -> f a
  {-# MINIMAL fmap #-}
        -- Defined in 'GHC.Base'
instance Functor [] -- Defined in 'GHC.Base'
instance Functor Maybe -- Defined in 'GHC.Base'
...

-- 2. 查看类型类的Haddock文档(需联网)
ghci> :doc Functor

3. 离线文档

安装Haskell平台后,可通过以下命令生成本地文档:

csharp 复制代码
# 生成base包的本地HTML文档
cabal haddock base --html
# 或用stack
stack haddock base

生成的文档会保存在本地目录,可离线浏览所有类型类。

二、Haskell标准库核心类型类全分类解析

base 包中的类型类可按"功能场景"分为8大类,以下是完整核心清单 + 核心用途解析:

1. 基础行为类(Prelude默认加载)

类型类 核心方法 核心用途 典型实例
Eq (==)(/=) 判断两个值是否相等 Int、String、Maybe a
Ord compare<<= 大小比较(排序/查找) 所有Eq实例 + 可比较类型
Show showshowList 类型转字符串(序列化) 几乎所有标准类型
Read readsPrecreadList 字符串转类型(反序列化) 几乎所有标准类型
Enum succpredenumFrom 枚举类型(连续值生成) Int、Char、Bool
Bounded minBoundmaxBound 有上下界的类型 Int、Bool、Char

2. 数值运算类(Numeric模块)

类型类 核心方法 核心用途 典型实例
Num (+)(-)(*)fromInteger 基础数值运算 Int、Double、Integer
Fractional (/)fromRational 分数运算(除法) Double、Float、Rational
Floating sincosexp 浮点数专用运算 Double、Float
Integral divmodtoInteger 整数专用运算 Int、Integer
Real toRational 实数转换(连接整数/分数) Int、Double、Rational
RealFrac properFraction 实数转分数(取整/小数部分) Double、Float
RealFloat floatRadixexponent 浮点数底层操作 Double、Float

3. 函子类(Functor体系)

类型类 核心方法 核心用途 典型实例
Functor fmap<$> 单参数容器映射(无副作用) []、Maybe、IO、Either e
Contravariant contramap 逆变函子(反向映射) Predicate、Comparison
Applicative pure<*> 多参数容器映射(无依赖) []、Maybe、IO
Alternative empty、`< >` Applicative的"可选/多值"扩展
Monad (>>=)return 单子(顺序依赖计算) []、Maybe、IO、Either e
MonadPlus mzeromplus Monad的"可选/多值"扩展 []、Maybe
MonadIO liftIO 嵌入IO操作的Monad IO、ReaderT r IO
MonadReader asklocal 只读环境的Monad Reader r
MonadWriter telllisten 写日志的Monad Writer w
MonadState getput 带状态的Monad State s

4. 容器遍历/聚合类

类型类 核心方法 核心用途 典型实例
Foldable foldMapfoldr 容器折叠(聚合/遍历) []、Maybe、Tree、Map k
Traversable traversesequenceA 带副作用的容器遍历 []、Maybe、Tree
Traversable1 traverse1 非空容器的Traversable NonEmpty、Vector

5. 代数结构类(Semigroup/Monoid)

类型类 核心方法 核心用途 典型实例
Semigroup (<>) 结合律二元操作(无单位元) String、[a]、Sum Int
Monoid memptymappend 幺半群(Semigroup + 单位元) String、[a]、Sum Int
Group invert 群(Monoid + 逆元) Sum Int、Product Int

6. 函数操作类

类型类 核心方法 核心用途 典型实例
Arrow arr(>>>) 箭头(函数的抽象扩展) (->)、Kleisli m
Applicative (同前) 函数作为容器的多参数映射 (->) r
Monad (同前) 函数作为容器的顺序计算 (->) r

7. 错误处理类

类型类 核心方法 核心用途 典型实例
MonadError throwErrorcatchError 带错误处理的Monad Either e、ExceptT e m
Exception toExceptionfromException 异常类型(IO错误) IOException、ArithException

8. 其他实用类

类型类 核心方法 核心用途 典型实例
IsString fromString 字符串字面量转换(OverloadedStrings扩展) String、Text、ByteString
Generic fromto 泛型编程(自动派生实例) 所有自定义数据类型
Lift lift 模板Haskell中的类型提升 基本类型、容器类型

三、关键补充说明

1. "所有类型类"的范围界定

  • 标准库核心 :上述清单覆盖了base包中99%的常用类型类,是Haskell编程的核心基础;
  • 扩展类型类 :部分类型类(如MonadTransMonadCont)在transformers包中,属于标准库的扩展,需手动导入;
  • 自定义类型类 :开发者可基于上述设计模式自定义类型类(如业务相关的ToJSON/FromJSONaeson包中)。

2. 学习优先级建议

无需一次性掌握所有类型类,按以下顺序学习:

  1. 基础类(Eq/Ord/Show/Read)→ 数值类(Num/Fractional)→ 函子类(Functor/Applicative/Monad);
  2. 容器类(Foldable/Traversable)→ 代数结构类(Semigroup/Monoid)→ 高级Monad(MonadReader/MonadState)。
相关推荐
Anita_Sun1 天前
一看就懂的 Haskell 教程 - 自定义类型(ADT、newtype 与 type)
haskell
Anita_Sun2 天前
一看就懂的 Haskell 教程 - 类型类
haskell
Anita_Sun4 天前
一看就懂的 Haskell 教程 - 类型推断机制
后端·haskell
Anita_Sun4 天前
一看就懂的 Haskell 教程 - 类型签名
后端·haskell
Lupino1 个月前
aio_periodic 重构与优化实战:构建高性能 Python 定时任务客户端
python·haskell
Lupino1 个月前
第十章:范畴之巅与逻辑的终点
haskell
Lupino1 个月前
第八章:万流归宗与开宗立派
haskell
Lupino1 个月前
第六章:化神之境与万法同源
haskell
Lupino1 个月前
第九章:类型黑魔法与推演天机
haskell