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

0 阅读3分钟

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

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

1. 官方文档(最全面)

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

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

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

2. GHCi交互式查询

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

-- 1. 查看类型类的定义(如Functorghci> :info Functor
class Functor (f :: * -> *) where
  fmap :: (a -> b) -> f a -> f b
  (<$) :: a -> f b -> f a
  {-# MINIMAL fmap #-}
        -- Defined inGHC.Baseinstance Functor [] -- Defined inGHC.Baseinstance Functor Maybe -- Defined inGHC.Base’
...

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

3. 离线文档

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

# 生成base包的本地HTML文档
cabal haddock base --html
# 或用stack
stack haddock base

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

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

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

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

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

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

类型类核心方法核心用途典型实例
Num(+)(-)(*)fromInteger基础数值运算Int、Double、Integer
Fractional(/)fromRational分数运算(除法)Double、Float、Rational
Floatingsincosexp浮点数专用运算Double、Float
IntegraldivmodtoInteger整数专用运算Int、Integer
RealtoRational实数转换(连接整数/分数)Int、Double、Rational
RealFracproperFraction实数转分数(取整/小数部分)Double、Float
RealFloatfloatRadixexponent浮点数底层操作Double、Float

3. 函子类(Functor体系)

类型类核心方法核心用途典型实例
Functorfmap<$>单参数容器映射(无副作用)[]、Maybe、IO、Either e
Contravariantcontramap逆变函子(反向映射)Predicate、Comparison
Applicativepure<*>多参数容器映射(无依赖)[]、Maybe、IO
Alternativeempty、`<>`Applicative的“可选/多值”扩展
Monad(>>=)return单子(顺序依赖计算)[]、Maybe、IO、Either e
MonadPlusmzeromplusMonad的“可选/多值”扩展[]、Maybe
MonadIOliftIO嵌入IO操作的MonadIO、ReaderT r IO
MonadReaderasklocal只读环境的MonadReader r
MonadWritertelllisten写日志的MonadWriter w
MonadStategetput带状态的MonadState s

4. 容器遍历/聚合类

类型类核心方法核心用途典型实例
FoldablefoldMapfoldr容器折叠(聚合/遍历)[]、Maybe、Tree、Map k
TraversabletraversesequenceA带副作用的容器遍历[]、Maybe、Tree
Traversable1traverse1非空容器的TraversableNonEmpty、Vector

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

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

6. 函数操作类

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

7. 错误处理类

类型类核心方法核心用途典型实例
MonadErrorthrowErrorcatchError带错误处理的MonadEither e、ExceptT e m
ExceptiontoExceptionfromException异常类型(IO错误)IOException、ArithException

8. 其他实用类

类型类核心方法核心用途典型实例
IsStringfromString字符串字面量转换(OverloadedStrings扩展)String、Text、ByteString
Genericfromto泛型编程(自动派生实例)所有自定义数据类型
Liftlift模板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)。