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

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.hqwc.cn/news/13188.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python验证公网ip与内网ip

公网IP和内网IP都是用于标识网络设备的地址,但它们有着不同的作用和特点。 公网IP是由互联网服务提供商(ISP)分配给用户设备的唯一标识符。它是全球范围内唯一的,并且可以被其他网络设备使用来寻找和连接特定的设备。公网IP通常用…

python_day2

猜数字-while循环 import randomnum random.randint(1, 10) while True:x int(input("输入&#xff1a;"))if x > num:print("大了")elif x < num:print("小了")else:print("猜对了")break打印九九乘法表-while循环 i 1 wh…

MySQL索引优化整合案例实现

目录 1 JOIN优化1.1 JOIN算法原理1.2 in和exists函数 2 order by优化2.1 索引排序2.2 额外排序2.3 排序优化 3 索引单表优化案例3.1. 建表3.2. 单表索引分析3.1.1 需求3.1.2 优化 4 索引多表优化案例 1 JOIN优化 1.1 JOIN算法原理 1) JOIN回顾 JOIN 是 MySQL 用来进行联表操作…

Spring Boot中的Hibernate是什么,如何使用

Spring Boot中的Hibernate是什么&#xff0c;如何使用 Hibernate是一个流行的Java ORM框架&#xff0c;它提供了一种将Java对象映射到关系数据库表的方法。Spring Boot集成了Hibernate&#xff0c;使得在开发Web应用程序时可以轻松地使用Hibernate操作数据库。本文将介绍Sprin…

插值算法

插值法在较少的数据模型的基础上模拟产生新的靠谱数值&#xff0c;可以用来预测。 利用已知的点建立合适的插值函数 f(x) ,未知点 x_i 由插值函数 f(x) 可以求出函数值 f(x_i) &#xff0c;用求得的 (x_i,f(x_i))近似代替未知点。 基本概念&#xff1a; yf(x)在[a,b]上有定义 x…

机器学习基础之《特征工程(2)—特征工程介绍、特征抽取》

一、什么是特征工程 机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” 注&#xff1a;业界广泛流传&#xff1a;数据和特…

vue创建项目报错npm install --loglevel error --legacy-peer-deps

vue创建项目报错npm install --loglevel error --legacy-peer-deps 如图所示&#xff1a; 话不多说&#xff0c;直接上解决方法&#xff1a; 1、找到这两个文件&#xff08;每个人的位置不一样&#xff0c;像我是安装在D盘&#xff09; 2、分别点进去&#xff0c;右键—属性…

时间序列预测 | Matlab麻雀算法(SSA)优化极限梯度提升树XGBoost时间序列预测,SSA-XGBoost时间序列预测模型,单列数据输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限梯度提升树XGBoost时间序列预测,SSA-XGBoost时间序列预测模型,单列数据输入模型 评价指标包括:MAPE、RMSE等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码

0基础学习VR全景平台篇 第57篇:高级功能-多语言

功能位置示意 一、本功能将用在哪里&#xff1f; 多语言功能&#xff0c;可一键设置作品界面语言为中/英文&#xff0c;或跟随系统自动切换中/英文&#xff0c;各位可以用户可以轻松制作英文版VR全景作品&#xff0c;满足国外用户访问的需求。 此外蛙色VR平台&#xff0c;可通…

Linux内核源码下载

参考文章&#xff1a;https://blog.csdn.net/m0_49328056/article/details/121669035 一、git命令下载 1、进入官网&#xff1a;https://www.kernel.org/ mainline&#xff08;主线版本&#xff09;、stable&#xff08;稳定版本&#xff09;、longterm&#xff08;长期演进版…

Redis实战案例13-集群下的并发安全问题

在解决一人一单的问题上面&#xff0c;采用了悲观锁的方案&#xff0c;但是这种方案只适合单机情况&#xff0c;在集群的模式下就不适用了&#xff1b; 覆盖yaml文件中的端口号 修改nginx中conf&#xff0c;这样就可以反向代理到两个节点上去&#xff0c;轮询的负载均衡规则&am…

尚硅谷Docker实战教程-笔记10【高级篇,Docker微服务实战】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇&#xff0c;Docker理念简介、官网介绍、平台入门图解、平台架构图解】…