欢迎道友来到第八章。
经过"炼虚期"对无限与惰性的感悟,你已经能够在那虚无缥缈的 Thunk 中捕捉真理。然而,一个人的修行终究是孤独的。想要炼制出震动九天的"绝世仙阵"(大型工程),你不能凡事都亲力亲为。
今日,我们要迈入合体期:万流归宗(Modules & Ecosystem) 。在这一层境界,你将学会如何开辟自己的"洞府分院",并学会借用万千道友留在**"藏经阁(Hackage)"**中的通天秘宝。
在修仙界,真正的强者从不自己手动实现每一个哈希表或解析器。他们懂得祭出**"召唤术"**,将前人的道果化为己用。
8.1 洞府分化:Module(模块系统)
随着你的法术(代码)越来越多,如果堆在一个卷轴里,难免会产生**"灵气冲突"**。你需要将它们拆分到不同的峰头。
- 定义峰头:
Haskell
rust
module LingXian.Alchemy (煉丹术, 炸炉) where
煉丹术 :: Material -> Pill
煉丹术 = ...
炸炉 :: String
炸炉 = "砰!"
-
引入传承:
当你在主峰修行时,只需一纸文书便可调用:
Haskell
arduino
import LingXian.Alchemy (煉丹术) -- 只取所需,不沾因果
8.2 镇宗神兽:Cabal 与 Stack
在凡间,管理依赖是一件苦差事。而在 λ 门,我们有两头神兽守护着宗门的秩序:Cabal 与 Stack。它们负责确保你引入的法宝之间不会产生"属性相克"(版本冲突)。
- Cabal: 古老的护法神,功能强大,能处理最复杂的因果链条。
- Stack: 后起之秀,主打"稳定"。它会为你选定一个特定的"修仙纪元"(Resolver),确保在该纪元下的所有法宝都能完美契合。
心法:
stack build一出,天地灵气自动汇聚,所有依赖自动归位。
8.3 藏经阁:Hackage 与 Hoogle
-
Hackage: 这是 λ 门的公共藏经阁,里面存放着数以万计的库。无论是处理文字、图形还是高维数学,这里都有道友留下的秘籍。
-
Hoogle(神识搜索): 这是修仙界最神奇的搜索引擎。你不仅可以用名字搜,还可以用**"法术签名"**搜。
- 示例: 你想找一个"能把列表反转"的法术,只需在 Hoogle 输入
[a] -> [a],它便会告诉你那叫reverse。
- 示例: 你想找一个"能把列表反转"的法术,只需在 Hoogle 输入
8.4 秘术:Qualified Import(定点召唤)
有时候,两个宗门都有同名的法术(比如 Data.Map.filter 和 Prelude.filter)。为了防止走火入魔,我们需要定点召唤:
Haskell
python
import qualified Data.Map as M
-- 使用时必须带上封号
M.filter (\v -> v > 0) myMap
⚡ 合体心得:不要重复造轮子
进入合体期后,你的修行重点应从"如何写代码"转向**"如何组合逻辑"**。
- 分治法: 复杂的逻辑拆分到不同模块,保持每个模块的因果简单。
- 善用工具: 遇到难题,先去 Hoogle 搜索类型签名,往往前人已经为你炼好了现成的丹药。
📜 合体试炼:第八关
请尝试在你的宗门中建立初步的秩序:
- 开辟分院: 创建一个名为
Geometry.hs的文件,定义一个module Geometry,包含计算圆面积的函数circleArea。 - 跨峰调用: 在你的
Main.hs中import Geometry并调用该函数。 - 神识搜索: 尝试访问 Hoogle,搜索类型签名
(a -> b) -> [a] -> [b],看看它会返回哪个你已经学过的"法宝"?
"不再是单打独斗,而是站在巨人的肩膀上俯瞰苍生。恭喜道友,合体期成,这世间已少有能难住你的逻辑了。"
下一章预告: 终于......我们要触碰那传说中"半步大乘"的领域了------第九章:大乘期:类型黑魔法(GADTs & Type Families) 。我们将学习如何让编译器在编译期为你"推演天机",甚至在程序运行前就证明它的绝对正确。