一种高级的纯函数式编程语言


声明性的、静态类型的代码。

素数 = 过滤素数 [2..]
  哪里 过滤素数 (p:X轴) =
          p : 过滤素数 [ |  <- X轴,  `国防部` p /= 0]

试试看!


证明

贝尔罗伊

我们发现哈斯凯尔将成为一名出色的球员,我们期待着在未来几年。

双名词

Haskell为我们在复杂的业务领域提供了巨大的优势同时让我们保持灵活和创新。类型系统允许我们快速整合新知识并重构相当大的代码库,相对容易。

卡拉布里奥

在卡拉布里奥,我们使用Haskell建立我们的客户情报和分析平台(卡拉布里奥高级报告)。哈斯克尔很强壮类型和语义为我们的数据提供了重要的保证操作和流程。

CentralApp公司

我们用Haskell。。。因为解决复杂问题需要行业中最好的工具。

电子邮箱7

Haskell允许我们使用自信。它能让我们在不必要的行为表现出来之前发现它在我们的生产环境中。

芬恩。

芬恩。不是一个在线分类广告网站,我们在生产。它允许我们表达业务逻辑正确,我们从安全和快乐中受益匪浅重构Haskell带来的。

裂变

Haskell使裂变能够构建坚如磐石的、可维护的、高性能的服务和工具。

猎狐犬系统

在Foxhound Systems,我们为各种客户。Haskell是我们建筑生产的首选因为它在开发人员的组合中是无与伦比的生产力、可维护性、可靠性和性能它所提供的。

哈苏拉

当我们想要构建一个MVP时,Haskell是一个理想的原型工具尽快拿出一个原型。。。哈斯凯尔让我们当我们需要的时候精确,当我们想要的时候快速。

想象一下人工智能

ImagineAI是一个用Haskell编写的智能代码生成器立即将你的应用规范转换成干净的Django和Node源代码代码。

IOHK公司

智能合约系统主要是编程语言,当涉及到编程语言在那里工作不是Haskell的竞争对手。

水银

水星是商业银行。我们用Haskell来满足客户对正确性和安全性的高标准。

诺雷丁

诺雷丁的最高交通特征。com现在通过哈斯克尔。与什么相比,我们看到了巨大的性能改进以前做的工作和降低生产错误率。

围巾

Haskell为围巾的后备箱提供动力,帮助我们快速移动,不会断裂东西。它提供了无与伦比的可维护性,因此我们可以快速使我们的系统能够安全地适应客户的移动目标要求。

瑟罗克尔

Haskell使我们能够构建可靠、高效和可维护的为我们的客户提供生物技术、金融科技和区块链的应用。

堆栈生成器

Haskell使得在23年内维护EdTech平台成为可能为来自世界上最大的跨国金融服务公司。

特征

静态类型

Haskell中的每个表达式都有一个在编译时确定的类型。由函数应用程序组成的所有类型必须匹配。否则,编译器将拒绝该程序。类型不仅成为一种保证形式,而且成为一种表达程序结构的语言。

单击以展开

所有Haskell值都有一个类型:

烧焦 = “a”    :: 烧焦
内景 = 123     :: 内景
乐趣 = isDigit公司 :: 烧焦 -> 布尔

必须将正确类型的值传递给函数,否则编译器将拒绝该程序:

类型错误
isDigit公司 1

您可以将字节解码为文本:

字节 = 密码.搞砸.沙阿1.搞砸 “你好” :: ByteString公司
文本 = 解码UTF8 字节               :: 文本

但不能解码文本,文本已经是Unicode点的向量:

类型错误
双重解码 = 解码UTF8 (解码UTF8 字节)

纯功能性

Haskell中的每个函数都是数学意义上的函数(即“纯函数”)。即使是有副作用的IO操作也不过是对要做什么的描述,由纯代码生成。没有语句或指令,只有不能改变变量(局部或全局)或访问状态(如时间或随机数)的表达式。

单击以展开

下面的函数接受一个整数并返回一个整数。它不能产生任何副作用,也不能改变它的任何参数。

广场 :: 内景 -> 内景
广场  =  * 

以下字符串连接正常:

“你好:” ++ “世界!” 

以下字符串串联是类型错误:

类型错误
“名称:” ++ getLine公司

因为getLine公司具有类型IO字符串而不是字符串,就像“名称:”是。所以根据类型系统,你不能混合和匹配纯度和杂质。

类型推断

您不必在Haskell程序中显式地写出每种类型。将通过双向统一每个类型来推断类型。但是,如果您选择的话,您可以写出类型,或者让编译器为您编写方便的文档。

单击以展开

此示例对每个绑定都有一个类型签名:

主要的 :: IO ()
主要的 =  线 :: 字符串 <- getLine公司
          打印 (解析数字 线)
  哪里 解析数字 :: 字符串 -> 也许 吧 内景
        解析数字 ((c :: 烧焦) : _) =
          如果 isDigit公司 c
             然后 只是 (作战需求文件 c - 作战需求文件 “0”)
             其他的 没有什么

但你可以写:

主要的 =  线 <- getLine公司
          打印 (解析数字 线)
  哪里 解析数字 (c : _) =
          如果 isDigit公司 c
             然后 只是 (作战需求文件 c - 作战需求文件 “0”)
             其他的 没有什么

您还可以使用推断来避免浪费时间解释您想要的:

 不锈钢 <- 解码 “[\”你好!\“,\”世界!\“]”
    <- 解码 [1,2,3]
   返回 (齐普维思 (\s  -> s ++ " " ++ 显示 ( + 5)) 不锈钢 )
 => 只是 [“你好!6”,“世界!7”]

类型免费提供解析器规范,不接受以下输入:

 不锈钢 <- 解码 [1,2,3]
    <- 解码 [空,空,空]
   返回 (齐普维思 (\s  -> s ++ " " ++ 显示 ( + 5)) 不锈钢 )
 => 没有什么

同时发生的

由于Haskell对效果的显式处理,它很适合并发编程。它的旗舰编译器GHC附带了一个高性能的并行垃圾收集器和轻量级并发库,其中包含许多有用的并发原语和抽象。

单击以展开

轻松启动线程并与标准库通信:

主要的 = 
  完成 <- newEmptyMVar
  福基奥 ( 普斯特林 “我是一根线!”
             普特瓦尔 完成 “完成了!”)
  第二 <- 福基奥 ( 线程延迟 100000
                       普斯特林 “我是另一条线!”)
  杀人犯 第二
  消息 <- 塔克姆瓦尔 完成
  普斯特林 消息

对线程使用异步API:

 a1号 <- 异步 (获取URL URL 1)
  a2 <- 异步 (获取URL url2)
  第1页 <- 等待 a1号
  第2页 <- 等待 a2
  ...

具有软件事务性内存的原子线程:

转移 :: 帐户 -> 帐户 -> 内景 -> IO ()
转移   数量 =
  原子的 ( 存款  数量
                 撤退  数量)

原子事务必须是可重复的,因此在类型系统中禁用任意IO:

类型错误
主要的 = 原子的 (普斯特林 “你好!”)

懒惰的

函数不计算它们的参数。这意味着程序可以很好地组合在一起,只需编写普通函数就可以编写控制结构(如if/else)。Haskell代码的纯粹性使函数链很容易融合在一起,从而带来性能优势。

单击以展开

轻松定义控制结构:

什么时候 p  = 如果 p 然后  其他的 返回 ()
主要的 =  阿格斯 <- getArgs公司
          什么时候 (无效的 阿格斯)
               (普斯特林 “未指定参数!”) 

如果你注意到一个重复的表达式模式,比如

如果 c 然后 t 其他的 

你可以给它起个名字,比如

 c t = 如果 c 然后 t 其他的 

然后使用它与原始表达式的效果相同。

通过组合lazy函数获得代码重用。表达任何通过重用地图功能:

任何 :: ( -> 布尔) -> [] -> 布尔
任何 p =  . 地图 p

在中重用递归模式地图,滤波器,福尔德等等。

包装

Haskell的开源贡献非常活跃,在公共包服务器上有大量可用的包。

单击以展开

免费提供6954个套餐。以下是最常见的一个示例:

bytestring公司 二进制数据 基础 序曲,IO,线程
网络 网络 文本 Unicode文本
帕塞克 分析器库 目录 文件/目录
hspec公司 类RSpec测试 阿托帕塞克 快速解析器
单子记录器 登录中 持久的 数据库ORM
模板haskell 元程序设计 焦油 焦油档案
咬合 Web框架 时间 日期、时间等。
happstack公司 Web框架 是的 Web框架
容器 地图、图表、集合 fsnotify公司 监视文件系统
暗示 解读哈斯克尔 unix系统 UNIX绑定
SDL公司 SDL绑定 OpenGL OpenGL图形系统
标准 标杆管理 盘古 文本呈现
开罗 开罗图形 统计学 统计分析
gtk公司 Gtk+库 油嘴滑舌 GLib库
测试框架 测试框架 资源池 资源池
管道 流式I/O mwc随机 高质量随机数
快速检查 性能测试 stm公司 原子线程
闪耀html 标记生成 谷类食品 二进制解析/打印
xml XML解析器/打印机 http客户端 HTTP客户端引擎
兹利布 zlib/gzip/未加工 山药 YAML解析器/打印机
潘多克 标记转换 二元的 序列化
tls公司 TLS/SSL zip存档 拉链压缩
弯曲 Web服务器 文本icu 文本编码
矢量 向量 异步 异步并发
流式IO 科学的 任意预选。数字
过程 启动过程 伊森 JSON解析器/打印机
D列表 区分列表 syb公司 通用程序。

赞助商

数据狗为所有Haskell提供强大的、可定制的24/7指标和监控集成。当事情出了问题时,大声地为我们抱怨。

快速地的下一代CDN为所有Haskell提供低延迟访问。org的下载和最高流量的服务,包括主Hackage服务器、Haskell平台下载等等。

马蹄铁提供计算、存储和网络资源,为几乎所有的Haskell供电。全球多个地区的组织。

状态。io权力https://status.haskell.org,让我们很容易告诉你什么时候我们弄坏了什么。

伽罗瓦提供基础设施、资金、管理资源,并曾主办过critical Haskell。组织基础设施,以及帮助Haskell社区的工作。

梦主人合作提供Haskell。通过他们的Dream Objects服务组织冗余的、可伸缩的对象存储。

哈斯克尔。组织

托管和管理哈斯克尔。组织,a 501(c)(3)非营利组织。

嘘!找维基?

这是新的Haskell主页!wiki已移至维基。哈斯克尔。组织。