PureScript 技术专题简介-冯金伟博客园

简介

PureScript编程范型函数式设计者Phil Freeman发行时间2013年,​9年前​(2013)目前版本0.15.8 (2023年3月6日) 型态系统类型推论, 静态, 强类型许可证三条款BSD许可证文件扩展名.purs网站www.purescript.org启发语言Haskell, JavaScriptPureScript是一种强类型、纯函数式、最终编译为JavaScript的编程语言。PureScript可以开发网络应用程序、服务端应用程序,也可以借助Electron开发桌面应用程序。其语法大多与Haskell相当。此外,它还引入了行多态性和可扩展记录。不过,与Haskell相反的是,PureScript坚持严格求值策略。

历史

PureScript最初由费尔·弗里曼在2013年设计。他曾屡次尝试在保留语义的情况下,将Haskell编译成JavaScript(如使用Fay、Haste或GHCJS),但结果并不满意,于是他开始着手在PureScript上工作。

从此以后它由社区接手并在GitHub继续开发。社区开发的额外核心工具包括专门的构建工具Pulp、文档目录Pursuit和包管理器Spago。

特征

PureScript特征主要为严格求值、持久性数据结构和类型推论。PureScript的类型系统同类似的函数式语言如Haskell共享了很特征:代数数据类型及模式匹配、高种类类型(英语:Kind (type theory))、类型类及函数依赖和高秩多态。PureScript的类型系统增加了对行多态(英语:Row polymorphism)和可扩展记录的支持。但是,PureScript缺乏对Haskell的某些更高级特征如GADT(英语:Generalized algebraic data type)和类型家族(英语:Type family)的支持。

PureScript编译器尝试产生尽可能可读的JavaScript代码。通过一个简单的FFI接口(英语:Foreign function interface),它还允许重用现存的JavaScript代码。

PureScript支持增量编译,而且编译器发行包括了支持为迭代开发建造源代码编辑器插件。存在编辑器插件针对很多流行的编辑器,包括Vim、Emacs、Sublime Text、Atom和Visual Studio Code。

PureScript通过它的“类型孔洞”特征支持“类型驱动开发”,在其中可以构造具有缺失子表达式的程序。编译器随后将尝试推论出缺失子表达式的类型,并将这些类型报告给用户。这个特征已经启发了GHC的类似工作。

示例

一个最精简的Hello world程序如下:

module Main whereimport Effect.Console (log)main = log "Hello World!"

在这里,程序的类型是由PureScript编译器推论出并检查。相同程序的更冗长版本可以包括显式的类型标注:

module Main whereimport Preludeimport Effect (Effect)import Effect.Console (log)main :: Effect Unitmain = log "Hello World!"