Haskell 入门学习(一)之安装试用 Haskell

news2024/11/18 3:46:43

Haskell 入门学习(一)之安装试用 Haskell


文章目录

  • Haskell 入门学习(一)之安装试用 Haskell
    • 前言:
    • 安装
      • Windows 安装
      • Linux、MacOs
    • 使用 VSCode 进行代码编写
    • 创建一个简单的项目
      • 使用 Cabal 管理项目
      • 项目大致结构
      • 运行项目
      • 结尾


前言:

最近对 Haskell 语言感兴趣,所以打算记录一下一些小历程,入门,那当然要先安装环境了,Haskell 的安装还是挺简单的,因为有 “ghcup” 这个工具管理包,它是用来专门安装GHC(也就是 Haskell 的环境)的, 相对来说,比传统的安装要方便很多。


安装

好,现在的你应该会直接去 Haskell 的官网直接下载,但是,下载速度感人,所以,如果你学过 Python 或是其他什么有 包管理器的语言时,你应该想到:这个语言的包管理器是否也能换源?换源即将下载服务器配置到中国国内,速度会快不少,所以官网的安装就不介绍了。我们介绍 中科大源。使用以下命令即可安装

Windows 安装

# Windows 用户:以非管理员身份在 PowerShell 中运行如下命令
$env:BOOTSTRAP_HASKELL_YAML = 'https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.7.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

Linux、MacOs

# Linux, FreeBSD, macOS 用户:在终端中运行如下命令
curl --proto '=https' --tlsv1.2 -sSf https://mirrors.ustc.edu.cn/ghcup/sh/bootstrap-haskell | BOOTSTRAP_HASKELL_YAML=https://mirrors.ustc.edu.cn/ghcup/ghcup-metadata/ghcup-0.0.7.yaml sh

在安装过程中,需要设置ghcup的安装目录,以及是否需要安装stack,cabal,HLS(语言服务器,必须安装的,因为语言提示相关需要语言服务器支持)。

在Windows下,ghcup会默认安装到C盘,我推荐安装到别的盘,你可以自己指定路径,Linux 安装不能改路径,在 Windows 可以改,直接将你的路径复制进去,然后回车就行。还要安装Cabal(可以用来项目管理,也要配置路径),安装时注意选定路径,因为是英文的,放图片又太占文章篇幅了,我就不放了,都是简单的配置英文。


使用 VSCode 进行代码编写

我就不讲 Linux 了,因为要配置 NVim ,不在这篇文章讲,在 Windows 用 VSCode 写 Haskell 代码就行。

首先我们要安装Haskell的插件,安装下面这两个就行,如果你看到了其他的插件,其实都没用,这两个就够了,第一个是主插件,第二个是语法高亮插件。

在这里插入图片描述

安装完成后我们需要配置 GHCup 的路径,打开vscode的设置,搜索 “haskell”会列出所有跟 haskell 相关的配置。下图的配置就是你 GHCup 的可执行文件的绝对路径。

在这里插入图片描述

这个插件可以自己进行管理,在下方的这个选项配置为 GHCup,令他自行管理。

在这里插入图片描述

好,到这里其他选项就不用看了,已经可以开写代码了。


创建一个简单的项目

使用 Cabal 管理项目

众所周知,项目也是有相应的管理器的,比如 C/C++ 的 Cmake,Java 的 maven,Rust 的 Cargo 等,在 Haskell 中,我们用 Cabel 进行项目管理。找一个地方创建一个 “Haskell”文件夹,这个文件夹存放我们所有的项目。

先创建一个“hello”文件夹,进入 hello ,使用以下命令创建一个项目

cabal init -i

其中,cabal init 是初始化一个简单项目,-i 参数代表 interactive 显示可交互配置,可以对项目进行更详细的配置,比如项目是可执行还是库等。很多项目信息是可更改的,所以不用太担心。

项目大致结构

在这里插入图片描述

我们可以看到,app文件夹是主目录,存放业务代码,src 文件夹是 库文件夹,也许能存放些你自己实现的有用工具。test文件夹是测试文件夹。其中,你可以注意到,项目下有一个后缀为 .cabal 的文件,这个文件是cabal项目配置文件,你可以在里面修改相应的项目配置。

运行项目

你也许会奇怪,项目才刚创建就能运行了吗?是的,我们可以开始尝试一下大名鼎鼎的 Haskell 了。

# ↓ 这条命令会编译现有项目
cabal build  
# ↓ 这两条命令会运行你的项目,一个运行app,一个运行test, myHello 是项目名
cabal run myHello
cabal run myHello-test

输入 cabal run myHello 后,终端会显示如下信息,说明你正式开启了 Haskell 的领域

Up to date
Hello, Haskell!
someFunc

输入 cabal run myHello-test 后,显示如下信息,第二行的信息说明你还没编写test功能,显示默认信息。

Up to date
Test suite not yet implemented.

结尾

这篇文章阐述了 Haskell 基于 GHCup 的几乎无痛的安装,其次讲解了 Cabal 管理器的简单使用,代表 正式开启了 Haskell 学习之路,我打算在下一篇文章记录一下 Haskell 的基本内容。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Verilog学习笔记3:与非门

1位的与非门 代码&#xff1a; timescale 1ns/10ps module nand_gate( A, B, Y);input A; input B; output Y;assign Y~(A&B);endmodule//testbenchmodule nand_gate_tb; reg A; reg B; wire Y;nand_gate nand_gate(.A(A),.B(B),.Y(Y));initial begin A<0;B<0;#10 …

Ubuntu创建Git项目并push到远程Github

首先在本地创建git仓库 jasminelhl:~/prj$ mkdir Github-test jasminelhl:~/prj$ cd Github-test jasminelhl:~/prj/Github-test$ git init 提示&#xff1a;使用 master 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中 提示&#xff1a;配置使用初始分支名&a…

MySQL之CONCAT、CONCAT_WS和GROUP_CONCAT函数用法

目录 一、准备数据 二、concat函数 1.语法格式 2.语法说明 3.场景使用 4.限制条件 三、concat_ws函数 1.语法格式 2.语法说明 3.场景使用 4.限制条件 四、group_conat函数 1.语法格式 2.语法说明 3.场景使用 4.限制条件 一、准备数据 #创建用户表 CREATE TABL…

[已解决]Springboot项目启动时端口被占用

目录 1.打开CMD窗口 2.找到端口号 3.找到对应程序 4.终止任务 5.再次查询端口&#xff0c;没有找到对应的端口号说明进行杀死成功 6. 重新启动项目&#xff0c;可以正常启动 Springboot端口号默认8080&#xff0c;启动时经常会遇到端口号被占用的情况&#xff0c;报错信息…

swift 打包xcframework报错“No ‘swiftinterface‘ files found within“

1、分别编译当前的framework&#xff0c;生成对应的真机framework与模拟器framework 生成对应framework.png 2、新建一个对应接收xcframework的文件夹&#xff0c;以XXX.xcframework格式命名 3、打开终端利用xcodebuild -create-xcframework命令进行生成xcframework。 具体如…

第一章 计算机网络概述【计算机网络】

第一章 计算机网络概述【计算机网络】 前言推荐第一章 计算机网络概述1.1 计算机网络在信息时代中的作用1.2互联网概述1.2.1 网络的网络1.2.2互联网基础结构发展的三个阶段1.2.3互联网的标准化工作 1.3互联网的组成1.3.1互联网的边缘部分1.3.2互联网的核心部分 1.4计算机网络在…

网络——网络排错

https://zhuanlan.zhihu.com/p/607083215 背景 出现网络故障时&#xff0c;我们需要做什么呢&#xff0c;做完网工&#xff08;不如dog&#xff09;&#xff0c;第一时间会被怀疑是网络问题&#xff0c;所以&#xff0c; 前端PC 前端PC能做的东西&#xff0c;不多&#xff0…

Go语言程序设计(十三)方法

Go语言虽然没有类(Class),但同样支持方法(Method),Go语言里的Method其实就是一个带接收者(Receiver)的函数。 一、Method的基本定义 Go语言中的Method类似于一个函数&#xff0c;只是函数名前多了一个绑定类型参数——receiver。 基本格式如下&#xff1a; func (recv recei…

启用 -parameters 编译选项简化 mybatis @Param 注解重复问题

在使用 mybatis 查询的时候, 只需要定义一个查询接口, mybatis 会为我们注入注解实现或是 xml 实现. 但当我们需要传递参数时, 通常需要 Param 来定义一个名称, 但经常的, 我们也不难发现, 这个名称与参数名称通常是一样的: User findUser(Param("username") String…

Docker使用Volumes做数据持久化

场景&#xff1a;docker 安装的 Pgsql 每当电脑重启docker重启 会发现 数据库都没了数据也没了 解决办法&#xff1a;使用docker volumes 做挂载 以PGSQL为例子&#xff0c;理论其他数据库或者项目需要持久化数据 应该都可以 1.创建Volumes 名字自己可以随便取。 2.拉去镜像…

开源预训练框架 MMPRETRAIN官方文档(概览、环境安装与验证、基础用户指南)

MMPretrain是全新升级的开源预训练框架。它已着手提供多个强大的预训练骨干网并支持不同的预训练策略。MMPretrain 源自著名的开源项目 MMClassification 和MMSelfSup&#xff0c;并开发了许多令人兴奋的新功能。目前&#xff0c;预训练阶段对于视觉识别至关重要。凭借丰富而强…

[SSM]MyBatis查询语句与动态SQL

目录 十、MyBatis查询语句专题 10.1返回Car 10.2返回List 10.3返回Map 10.4返回List 10.5返回Map,map> 10.6resultMap结果映射 使用resultMap进行结果映射 是否开启驼峰命名自动映射 10.7返回总记录条数 十一、动态SQL 11.1 if标签 11.2 where标签 11.3 trim标…

Oracle表空间和用户

Oracle表空间和用户 前言 1、创建表空间 2、 删除表空间 3、创建用户 4、用户赋权限 5、Oracle三个重要的角色 1、创建表空间 ORACLE 数据库的逻辑单元。 一个表空间可以与多个数据文件&#xff08;物理结构&#xff09;关联 一个数据库下可以建立多个表空间&#xff0c;一个表…

探秘制造业数智化:揭开低代码开发平台的新篇章

前言 随着数智时代的到来&#xff0c;制造业面临着前所未有的转型机遇。在这个信息爆炸的时代&#xff0c;如何有效运用科技和数据资源&#xff0c;成为了制造业企业的当务之急。而低代码开发平台&#xff0c;如JNPF快速开发平台&#xff0c;正是这个转型过程中不可或缺的利器。…

【编程语言 · C语言 · 结构体】

【编程语言 C语言 结构体】https://mp.weixin.qq.com/s/pWI712NxhPJi37eWrE9ofw

【产生初始解利器】基于蒙特卡洛模拟产生满足固定需求和固定供给的随机供给矩阵

如何生成一个总和是定值的随机矩阵 震惊&#xff0c;如果做一个约束比较强的模型&#xff0c;解的矩阵需要满足很多等式约束&#xff0c;而且都是整数&#xff0c;随机产生初始解很困难&#xff0c;该怎么办&#xff1f; 震惊&#xff0c;如果做一个约束比较强的模型&#xff0…

多元回归预测 | Matlab粒子群算法(PSO)优化极限梯度提升树XGBoost回归预测,PSO-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 粒子群算法(PSO)优化极限梯度提升树XGBoost回归预测,PSO-XGBoost回归预测模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多变量输入模型,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高…

多元回归预测 | Matlab麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多

windows设置右键一键打开文件的配置

在安装软件时一般通过msi或者exe安装&#xff0c;这是一般会有提示绑定到鼠标右键&#xff0c;如果没有勾选则安装后就无法通过右键打开&#xff0c;这是需要把文件拖到快捷方式上面才可以使用该软件打开。 另外如何下载的是zip的压缩包源码格式根本没有设置的选项&#xff0c…

2.3 Web应用 -- 3. HTTP 消息格式

2.3 Web应用 -- 3. HTTP 消息格式 HTTP请求消息HTTP响应消息 HTTP请求消息 HTTP协议有两类消息 请求消息(request)响应消息(response) 请求消息 ASCII&#xff1a;人直接可读 HTTP请求消息的通用格式 上传输入的方法 POST方法 网页经常需要填写表格(form)在请求消息的消息体(…