Haskell编程语言入门

时间:2020-03-21 11:47:57  来源:igfitidea点击:

Haskell是一种先进,纯粹的功能和通用编程语言。

本教程地址如何安装Haskell以及如何在UNIX操作系统中使用Haskell编程语言入门。
Haskell可以三种方式安装;手动安装,使用堆栈和使用Haskell平台。
到目前为止,使用堆栈安装Haskell是官方推荐和最简单的方法。
在本教程中,我们将看到如何安装Haskell以及如何在UNIX的系统中使用Haskell编程语言入门。

安装haskell工具堆栈

Haskell Tool Stack是一个跨平台的跨平台,用于构建Haskell项目。
随着Haskell堆栈,我们为Haskell提供了全面的开发环境。
使用Haskell工具堆栈,我们可以轻松安装以下组件:

  • 堆栈:用于多包Haskell项目的项目构建器,
  • GHC:Haskell程序的编译器和口译员,
  • Haddock:Haskell软件包的文档生成器,
  • 和数千个包可以按需安装。

首先,让我们使用命令安装Haskell堆栈:

$wget -qO- https://get.haskellstack.org/| sh

或者,

$curl -sSL https://get.haskellstack.org/| sh

上面的命令将下载最新的堆栈版本并立即安装。

这些命令几乎是所有Linux发行版和FreeBSD的相同。
但是,Arch Community正在维持[社区]存储库中的官方版本。
因此,如果我们正在运行Arch Linux和/或者任何基于ARCH的系统,只需运行以下命令即可安装最新的稳定堆栈版本。

$sudo pacman -S stack

安装后,运行以下命令将路径环境变量设置为包括$home/.local/bin:

$echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc

使用命令更新~/.bashrc文件中的更改:

$source ~/.bashrc

让我们看看已安装的堆栈版本:

$stack --version
Version 1.6.1, Git revision f25811329bbc40b0c21053a8160c56f923e1201b (5435 commits) x86_64 hpack-0.20.0

要随时更新堆栈,刚刚运行:

$stack upgrade

要更新包索引,请运行:

$stack update

我们已安装堆栈。
让我们继续创建一个新项目。

建立一个新项目

要获取我们的新项目,我们需要一些文件,如一些Haskell源代码,包.yaml,stack.yaml和.cabal文件等其他目录。
我们可以手动创建这些文件。
但是,Haskell有许多预定义的模板。
所以,我们可以使用一个而不是手动创建它们。

要列出所有可用模板,请运行:

$stack templates

现在,我将创建一个名为"onItoad"的新项目,并使用"新模板"。
为此,运行:

$stack new theitroad new-template

示例输出将是:

Downloading template "new-template" to create project "theitroad" in theitroad/...
The following parameters were needed by the template but not provided: author-email, author-name, category, copyright, github-username
You can provide them in /home/sk/.stack/config.yaml, like this:
templates:
 params:
 author-email: value
 author-name: value
 category: value
 copyright: value
 github-username: value
Or you can pass each one as parameters like this:
stack new theitroad new-template -p "author-email:value" -p "author-name:value" -p "category:value" -p "copyright:value" -p "github-username:value"
Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- theitroad/
Selecting the best among 12 snapshots...
Downloaded lts-10.0 build plan. 
Populated index cache. 
* Matches lts-10.0
Selected resolver: lts-10.0
Initialising configuration using resolver: lts-10.0
Total number of user packages considered: 1
Writing configuration to file: theitroad/stack.yaml
All done.

安装GHC.

转到新创建的项目的目录并运行'堆栈设置'下载并安装所需的编译器。

$cd theitroad/
$stack setup

此命令将正确的GHC编译器安装到新的HASKELL项目。
GHC将安装在孤立的位置。
这意味着这不会干扰任何系统级安装。

请注意,GHC将安装在全局堆栈根目录上。
所以,我们不能使用命令GHC从shell调用它。
相反,考虑使用:Stack GHC,Stack GHCI,Stack Runghc或者Stack Exec。
有关路径的更多信息,请运行:

$stack path

和..

$stack exec env

我们现在创建了一个新项目并为我们的项目安装了正确的编译器。
现在是时候建造它了。

构建项目

要构建项目,请运行:

$stack build

确保在项目的目录中运行此命令。
构建完成后,使用命令运行可执行文件:

$stack exec theitroad-exe

示例输出将是:

someFunc

请注意,可执行文件"OniToad-EXE"将隐藏在项目的主目录中的./.Stack-工作目录中。

玩Haskell.

打开GHCI编译器:

$stack exec ghci

或者,

$stack exec -- ghci

我们将登陆GHCI提示。

GHCi, version 8.2.2: http://www.haskell.org/ghc/:? for help
Prelude>

像其他人一样,让我们从"你好世界!"开始。

Prelude> "hello world!"
"hello world!"

让我们尝试一些算术运算。

Prelude> 14+90
104
Prelude> 14-90
-76
Prelude> 34/2
17.0

一些复杂的操作:

Prelude> (67*98) - 50 - (24-2)
6494

让我们了解哪个数字更大或者更小:

Prelude> max 34 17
34
Prelude> min 45 98
45

找到继任者:

Prelude> succ 89
90

找到给定的输入等于或者不等于:

Prelude> 10 == 10
True
Prelude> 10 == 20
False
Prelude> "theitroad" == "theitroad"
True
Prelude> "theitroad" == "windows"
False

它也很容易使用如下所示的布尔值:

Prelude> True && False
False
Prelude> True && True
True
Prelude> False || True
True
Prelude> False && False
False

默认情况下,提示名称是prelude>。
我们可以通过键入以下方式将其更改为其他内容,例如ghci>

:set prompt "ghci> "

有关帮助,请键入:

:?

要退出,请键入:

:quit

或者,

:q

请注意,我们不必创建项目的目录。
只需从shell运行"Stack GHCI",我们可以开始使用堆栈。
它将下载正确的GHC版本并将我们降落在Prelude>提示符中。

编译和运行Haskell代码

很容易运行Haskell代码。
检查以下示例。

创建一个名为"onitad.hs"的文件,其中包含以下内容。

#!/usr/bin/env stack
-- stack --install-ghc runghc
main :: IO ()
main = putStrLn "Welcome To theitroad"

现在,我们可以使用命令运行此程序:

$stack theitroad.hs 
Welcome To theitroad

这是另一个例子。

使用以下代码创建名为myhaskell.hs的haskell程序:

module Main where
main :: IO ()
main = putStrLn "Welcome To theitroad!"

然后使用命令编译它:

stack exec -- ghc myhaskell.hs -o test.hs

示例输出将是:

[1 of 1] Compiling Main ( myhaskell.hs, myhaskell.o )
Linking theitroad.hs ...

最后,如下所示运行它:

$./test.hs 
Welcome To theitroad!