初识Haskell

时间:2022-12-15 15:45:16

在COMP30026 Models of Computation中接触了新的编程语言Haskell,一个之前听都没有听过的语言,在此记录关于Haskell的一些最基本概念。


1.Haskell是一个函数式编程语言(functional programming language),函数式编程语言最基本的操作是function application。

2.GHC(the Glasgow Haskell Compiler)是Haskell的编译器,GHCi是Haskell的互动编程环境。

3.官网www.haskell.org,相关下载、文档、教程都在其中。

4.Haskell语言的特点(摘自官网):

  (1) 静态类型statically typed

  在Haskell中所有的表达式(expression)的类型(type)在编译时确定,在function application中的类型必须匹配,不匹配会被编译器拒绝。类型在Haskell中不仅是一种保证形式,也是Haskell对程序构建的表示。

  (2) 纯函数purely functional

  在Haskell中的每一个函数(function)都是数学意义上的函数,即使是副作用(side-effect)的IO操作也只是对纯代码产生的操作的描述。没有语句和指令,只有不能改变(局部或全局)变量和访问如时间和随机数状态的表达式,也就是无状态。

  *副作用一般是针对操作(表达式)而言的,一个操作/表达式有“副作用”是指在对该表达式求值时,会改变程序的一个或多个数据,以致再次对该表达式求值时,可能会得出不同的结果。事实上,Java的4种表达式语句如赋值、自增自减、方法调用、对象创建都可能带来副作用。

  (3) 类型推断type inference

  不必在Haskell中明确写出每个类型。类型将通过双向统一每一个类型来推断出。但如果选择写出类型或是要求编译器写出。

  (4) 并发concurrent

  Haskell对效果的明确处理,非常适合并发编程。它的编译器GHC带有高性能并行垃圾收集器和轻量级并发库,其中包含许多有用的并发原语和抽象。

  (5) 惰性lazy

  函数不检测其参数,这意味程序可以很好地通过普通函数和控制结构(如if/else)来组合在一起。Haskell代码的纯粹使得功能链更容易融合在一起,从而取得性能优势。

  (6) 包packages

  Haskell的开源贡献非常活跃,公共包服务器上提供了范围非常广的包。