哈斯克尔

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


声明性的静态类型代码。

素数 = 过滤器Prime [2..] 哪里
  过滤器Prime (第页:X轴) =
    第页 : 过滤器Prime [x个 | x个 <- X轴, x个 `模块` 第页 /= 0]

试试看!


证词

Bellroy:徽标

贝尔罗伊

我们发现哈斯克尔将出类拔萃,我们期待着在未来几年。

Bitnomial:徽标

二项式

Haskell在我们复杂的业务领域为我们提供了巨大的杠杆作用同时让我们保持敏捷和创新。类型系统使我们能够快速集成新知识并重构我们的相当大的代码库,相对容易。

卡拉布里奥:标志

卡拉布里奥

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

CentralApp:徽标

中央应用程序

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

e-bot7:徽标

电子邮箱7

Haskell允许我们使用信心。它允许我们在显示之前检测不需要的行为在我们的生产环境中。

finn.no:徽标

财务编号

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

裂变:徽标

裂变

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

Foxhound Systems:徽标

Foxhound系统

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

Hasura:徽标

哈苏拉

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

想象AI:徽标

想象AI

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

IOHK:徽标

IOHK公司

智能合约系统主要涉及编程语言,当谈到编程语言时不是Haskell的竞争对手。

水星:徽标

水星

Mercury为初创公司提供银行服务,无论规模大小或阶段如何。我们使用Haskell将满足客户对正确性和安全。

NoRedInk:徽标

无RedInk

noredink.com流量最高的功能现在通过以下方式提供哈斯克尔。相比于之前也做过这项工作减少生产错误率。

围巾:徽标

围巾

Haskell为Scarf的后端提供支持,帮助我们快速移动而不中断东西。它提供了无与伦比的可维护性,因此我们可以快速并安全地使我们的系统适应客户的移动目标需求。

Serokell:标志

塞罗基尔

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

烟囱建造商:徽标

烟囱建造商

Haskell使维护EdTech平台成为可能最大的跨国金融服务公司。

功能

静态键入

Haskell中的每个表达式都有一个在编译时确定的类型。由函数应用程序组合在一起的所有类型都必须匹配。如果他们不这样做,程序将被编译器拒绝。类型不仅成为一种保证形式,而且成为表达程序构造的语言。

单击展开

所有Haskell值都有一个类型:

烧焦 = “a”    时间: 烧焦
整数 = 123     时间: 国际
乐趣 = 是数字 时间: 烧焦 -> 布尔

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

类型错误
是数字 1

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

字节 = 加密.搞砸.SHA1公司.搞砸 “你好” 时间: 字节字符串
文本 = 解码Utf8 字节               时间: 文本

但您无法解码文本,因为它已经是Unicode点的矢量:

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

功能齐全

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

单击展开

以下函数接受一个整数并返回一个整数。根据类型,它不能做任何副作用,也不能改变任何参数。

广场 时间: 国际 -> 国际
广场 x个 = x个 * x个

以下字符串串联是可以的:

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

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

类型错误
“姓名:” ++ 获取线路

因为获取线路具有类型IO字符串而不是字符串,比如“姓名:”所以根据类型系统,你不能将纯度和杂质混合搭配。

类型推断

您不必在Haskell程序中显式写出每个类型。将通过双向统一每个类型来推断类型。然而,如果您愿意的话,您可以写出类型,或者让编译器为您编写这些类型,以便于编写文档。

单击展开

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

主要的 时间: IO(输入输出) ()
主要的 =  线 时间: 字符串 <- 获取线路
          打印 (解析数字 线)
  哪里 解析数字 时间: 字符串 -> 也许 吧 国际
        解析数字 ((c(c) 时间: 烧焦) : _) =
          如果 是数字 c(c)
             然后 只是 ( c(c) -  '0')
             其他的 没有什么

但你可以写下:

主要的 =  线 <- 获取行
          打印 (解析数字 线)
  哪里 解析数字 (c(c) : _) =
          如果 是数字 c(c)
             然后 只是 ( c(c) -  “0”)
             其他的 没有什么

您还可以使用推理来避免浪费时间解释您想要什么:

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

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

 不锈钢 <- 解码 "[1,2,3]"
    <- 解码 “[空,空,空]”
   返回 (拉链 (\  ->  ++ " " ++ 显示 ( + 5)) 不锈钢 )
 => 没有什么

同时发生的

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

单击展开

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

主要的 = 
  完成 <- 新的空MVar
  fork IO(分叉IO) ( 输入StrLn “我是一线!”
             putMVar(推杆) 完成 “完成!”)
  第二 <- fork IO(分叉IO) ( 线程延迟 100000
                       输入StrLn “我是另一个线程!”)
  killThread线程 第二
  消息 <- takeMVar(获取MVar) 完成
  输入StrLn 消息

对线程使用异步API:

 第1页 <- 异步 (获取URL 网址1)
  a2类 <- 异步 (获取URL URL 2)
  第1页 <- 等待 第1页
  第2页 <- 等待 a2类
  ...

使用软件事务性内存的原子线程:

转移 时间: 账户 -> 账户 -> 国际 -> IO(输入输出) ()
转移   数量 =
  原子地 ( 存款  数量
                 撤退  数量)

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

类型错误
主要的 = 原子地 (输入StrLn “你好!”)

懒惰

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

单击展开

轻松定义控制结构:

什么时候 第页  = 如果 第页 然后  其他的 返回 ()
主要的 =  参数 <- 获取参数
          什么时候 (无效 参数)
               (输入StrLn “未指定参数!”) 

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

如果 c(c) 然后 t吨 其他的 False(错误)

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

 c(c) t吨 = 如果 c(c) 然后 t吨 其他的 False(错误)

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

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

任何 时间: ( -> 布尔) -> [] -> 布尔
任何 第页 =  . 地图 第页

在中重用递归模式地图,滤波器,文件夹等。

包装

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

单击展开

有6954个软件包可免费获得。以下是最常见的示例:

字节删除 二进制数据 基础 前奏曲、IO、线程
网络 网络 文本 Unicode文本
解析 分析器库 目录 文件/目录
hspec公司 RSpec类试验 阿托帕塞克 快速解析器
单记录器 登录中 持久的 数据库ORM
template-haskell模板 元编程 焦油 焦油档案
捕捉 Web框架 时间 日期、时间等。
happstack公司 Web框架 是的,是的 Web框架
容器 地图、图形、集合 fs通知 监视文件系统
暗示 解释Haskell unix(通用) UNIX绑定
SDL公司 SDL绑定 OpenGL(OpenGL) OpenGL图形系统
标准 标杆管理 潘戈 文本呈现
开罗 开罗图案 统计学 统计分析
全球技术委员会 Gtk+库 油嘴滑舌的 GLib库
测试框架 测试框架 资源库 资源池
管道 流式I/O mwc-随机 高质量随机数
快速检查 性能测试 stm公司 原子线程
火焰html 标记生成 谷物 二进制解析/打印
xml格式 XML解析器/打印机 http客户端 HTTP客户端引擎
zlib公司 zlib/gzip/raw 山药 YAML解析器/打印机
潘多克 标记转换 二元的 序列化
tls公司 TLS/SSL 拉链存档 拉链压缩
弯曲 Web服务器 文本-icu 文本编码
矢量 矢量 异步 异步并发
流式IO 科学的 任意参数。数字
过程 启动过程 伊森 JSON解析器/打印机
数据清单 差异列表 syb公司 通用程序。

赞助商

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

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

Equinix金属提供计算、存储和网络资源,为全球多个地区的Haskell.org提供几乎所有的支持。

梦想主机已联手通过其Dream Objects服务为Haskell.org提供冗余、可扩展的对象存储。

加洛瓦提供基础设施、资金和行政资源,并在历史上托管了重要的Haskell.org基础设施,并帮助整个Haskell社区开展工作。

围巾提供关于Haskell采用情况的数据和见解,以支持Haskel生态系统的发展,并促进行业对该语言的支持。

Haskell.org网站

由托管和管理Haskell.org网站,501(c)(3)非营利组织。

嘘!寻找维基?

这是新的Haskell主页!wiki已移至wiki.haskell.org。