Link Search Menu Expand Document

目录

  1. 目录
  2. 开始使用 Haskell
  3. 安装 Z.Haskell

开始使用 Haskell

Z.Haskell 是基于 GHC 与 Cabal 构建的 Haskell 项目,为了使用 Z.Haskell,需要如下工具:

  • GHC (>=8.6)
  • Cabal (>=2.4)

虽然可以使用系统包管理器来安装这些工具(请参考你的操作系统 / 发行版教程),使用 GHCup 和针对中国地区的优化配置能获得不错的体验。GHCup 是安装 GHC、Cabal 和 Haskell 语言服务器的跨平台、多版本共存解决方案。

  • 安装 GHCup

官方安装脚本:

Linux、macOS(搭载 Intel 芯片)、FreeBSD 或适用于 Linux 的 Windows 子系统

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh

macOS(搭载 Apple Silicon 芯片)

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | arch -x86_64 /bin/bash

中国用户可以使用上海交通大学 SJTUG的 GHCup 安装镜像,见如下:

Linux、macOS(搭载 Intel 芯片)、FreeBSD 或适用于 Linux 的 Windows 子系统

curl --proto '=https' --tlsv1.2 -LsSf https://mirror.sjtu.edu.cn/ghcup/script/install.sh | sh

macOS(搭载 Apple Silicon 芯片)

curl --proto '=https' --tlsv1.2 -LsSf https://mirror.sjtu.edu.cn/ghcup/script/install.sh | arch -x86_64 /bin/bash

Windows 用户请参考在 Windows 上安装 Haskell 平台的说明

ArchLinux 用户可以使用 ArchLinux CN 软件仓库中的 archlinuxcn/ghcup-hs-bin

sudo pacman -Syu ghcup-hs-bin

此外,GHCup 需要修改额外的配置文件来从镜像站下载 GHC、Haskell 语言服务器与 Cabal,参考此处的文档。字符图形界面的 GHCup 更佳直观易用,并且会显示支持状态与推荐程度:运行 ghcup tui

  • 杂项

也可以获取预构建的二进制包后手动安装 GHCCabal

安装 Z.Haskell

中国地区用户可能需要配置 Hackage / Stackage 来获取更好的使用体验。

Stack 在运行过程中可能会需要访问一些不便于连接的地址。

以使用 Z-Data 包为例,只需要将下面的内容添加到项目的 Cabal 配置文件:

...
    build-depends:          Z-Data == 0.8.*

接下来在项目路径下运行 cabal build,Cabal 将会自动下载构建 Z-Data 的依赖。出于教学目的,接下来利用 Z-Data 与 Z-IO 创建一个简单的 TCP 回音服务器:

  1. 使用 cabal 命令初始化项目

     mkdir tcp-echo
     cd tcp-echo
     cabal init -i
    

    cabal 将需要获取一些与项目有关的信息来初始化 tcp-echo.cabal 文件。

  2. 编辑 Cabal 项目配置文件以添加依赖

    用一个文本编辑器打开 tcp-echo.cabal 文件,并将以下内容添加到 executable 一节。

     ...
         build-depends:          Z-IO  == 0.8.*
    
  3. 编辑代码

    编辑 src/Main.hs 文件来创建一个简单的 TCP 回音服务器:

     import Control.Monad
     import Z.IO
     import Z.IO.Network
    
     main :: IO ()
     main = do
         let addr = SocketAddrIPv4 ipv4Loopback 8080
         startTCPServer defaultTCPServerConfig{ tcpListenAddr = addr } $ \ tcp -> do
             i <- newBufferedInput tcp
             o <- newBufferedOutput tcp
             forever $ readBuffer i >>= writeBuffer o >> flushBuffer o
    
  4. 构建运行

    确保在这之前运行过 cabal update 命令以获取最新的软件包列表。运行 cabal build 命令将会在自动下载构建依赖后构建这个项目。过程中可能看到如下输出:

     Resolving dependencies...
     Build profile: -w ghc-8.6 -O1
     In order, the following will be built (use -v for more details):
      - Z-IO-0.8.0.0 (lib) (requires download & build)
      - tcp-echo-0.1.0.0 (exe:tcp-echo) (first run)
     Downloaded   Z-IO-0.8.0.0
     Starting     Z-IO-0.8.0.0 (lib)
     Building     Z-IO-0.8.0.0 (lib)
     ...
    

    第一次使用时 Cabal 需要一些时间来下载并编译所有的依赖,本次构建的缓存将会提高之后构建的速度。作为参考,在一台搭载 Intel 四代处理器的笔记本上构建 Z-Data 和 Z-IO 需要十分钟。放轻松,喝杯茶。

构建完成后,可以使用 cabal run 来运行这个回音服务器,并用 nc 0.0.0.0 8080 来测试。教程结束,玩得愉快!