VSCode(Windows)配置Haskell开发环境

VSCode(Windows)配置Haskell开发环境

目录
  • 简介
    • Haskell
    • Haskell 工具链
  • 安装
    • 准备工作
    • GHCup
    • 安装
    • Clash
      • TUN Mode
      • 代理
    • VSCode
  • 检验
  • 参考

简介

Haskell

  • 理论基础: λ 演算
  • 强静态类型
  • 类型推断
  • 惰性求值
  • 纯函数式编程语言: 无 side-effect (副作用)
  • 并发编程

Haskell 工具链

  • GHCup

​ 版本管理器, 管理 Haskell 工具链 (GHC, Cabal, Stack, HLS)

  • GHC

    Haskell 编译器

  • Cabal Stack

    包管理器和构建系统

  • HLS

    Haskell Language Server 提供代码编辑相关服务(代码补全, 跳转等)

安装

准备工作

关闭杀毒软件直至安装完成

GHCup

1. 安装 GHCup 本体

以非管理员身份在 PowerShell 中运行:

$env:BOOTSTRAP_HASKELL_YAML = "https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-latest.yaml"
Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://mirrors.ustc.edu.cn/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true

一路 enter 过去, 能把 GHCup 安装就算成功, 其余的都能用 GHCup安装

包下载过程中遇到有关墙方面的网络问题尝试通过后面的 clash 全局代理方法

2. 换源

GHCup 配置中科大源

修改 GHCup 配置文件

其余教程(Linux) ghcup 配置文件位于 ~/.ghcup/config.yaml

对应在 Windows 中在 C:/Users/用户名/.ghcup/config.yaml

实际情况却是 C:/ghcup/config.yaml

url-source:
  OwnSource:
    - https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-latest.yaml

Cabal 配置中科大源

powershell 执行

cabal user-config init

修改 Cabal 配置文件

其余教程(Linux) Cabal 配置文件位于 ~/.cabal/config

对应在 Windows 中在 C:/Users/用户名/.cabal/config

实际情况却是 C:/cabal/config

Cabal >= 1.24 (GHC 8.0)

找到官方仓库:

repository hackage.haskell.org
  url: http://hackage.haskell.org/
  -- secure: True
  -- root-keys:
  -- keys-threshold: 3

替换为:

repository mirrors.ustc.edu.cn
  url: https://mirrors.ustc.edu.cn/hackage/
  secure: True

powershell 执行

cabal update

Stack 配置中科大源

修改 Stack 配置文件

其余教程(Linux) Stack 配置文件位于 ~/.stack/config.yaml

对应在 Windows 中在 C:/Users/用户名/.stack/config.yaml

实际情况也在 C:/Users/用户名/.stack/config.yaml

>= v2.9.3

package-index:
  download-prefix: https://mirrors.ustc.edu.cn/hackage/
  hackage-security:
    keyids:
      - 0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d
      - 1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42
      - 280b10153a522681163658cb49f632cde3f38d768b736ddbc901d99a1a772833
      - 2a96b1889dc221c17296fcc2bb34b908ca9734376f0f361660200935916ef201
      - 2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3
      - 51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921
      - 772e9f4c7db33d251d5c6e357199c819e569d130857dc225549b40845ff0890d
      - aa315286e6ad281ad61182235533c41e806e5a787e0b6d1e7eef3f09d137d2e9
      - fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0
    key-threshold: 3 # number of keys required

    # ignore expiration date, see https://github.com/commercialhaskell/stack/pull/4614
    ignore-expiry: true

安装

包下载过程中遇到有关墙方面的网络问题尝试通过后面的 clash 全局代理方法

ghc

ghcup install ghc latest

cabal

ghcup install cabal latest

stack

ghcup install stack latest

hls

ghcup install hls latest

Clash

如果通过换源的方式下载不了某些包, 可以通过 Clash for Windows 的 TUM mode 创建的虚拟网卡代理所有流量来下载

TUN Mode

Clash For Windows → 常规 → 系统代理打开

TUN Mode 需要先安装 Service Mode(服务模式)

Clash For Windows → 常规 → Service Mode 后的管理 → 安装 → 绿色地球

Clash For Windows → 常规 → TUN Mode打开

代理

非管理员权限的 PowerShell 执行

# 假设 Clash For Windows 使用默认端口号 7890
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"

bash 执行

export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"

随便找个目录执行 curl

在 powershell 中执行会报错, 所以我在 git bash 中执行 curl

curl -LO https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1

编辑脚本

# Exec "$Bash" "-lc" "exit" # 注释掉这行
& "$Bash" "-lc" "exit" 		# 加上这行

运行脚本

命令行或直接运行

./bootstrap-haskell.ps1 -Interactive -DisableCurl

VSCode

安装插件 haskell.haskell

检验

查看模块安装情况

ghcup tui

构建项目

mkdir test
cd test
cabal init --interactive
cabal build
cabal run

参考

国内如何安装 Haskell 运行环境 (Windows)

中科大镜像站: GHCup

清华镜像站: Hackage

如何安装 Haskell 工具链(2022 年版)

原文地址:https://www.cnblogs.com/clearlife/p/18758107