首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Haskell

通过官网,你可以下载到它运行环境,目前Haskell根据你不同场景需求,提供了几种安装包,最小尝试,我们可以从Minimal installers开始,你可以根据你操作系统平台来选择下载Core...ghc包含了三个主最要部分: ghc 编译器 ghci 交互式解析器和调试器 runghc 以脚本方式运行Haskell 而我们即将学习起点就是在ghci中来练习Haskell基本语法。...在终端输入ghci进入交互式界面: Prelude> 1+(-1) = 0 据说“命令式属于工程师”,“函数式属于科学家”,这门语言还有哲学层面的东西。...这个项目,有趣地方在于很多审计需要符合科学哲学,它要解决问题很像是比特币+以太坊,很有意思是它通过民主投票方式来解决分歧,我很喜欢这个特性,我们持有的Cardano代币,就能让我们进行投票,并且这不是损耗...(注明:本文不是投资建议,仅仅是从Haskell引发出来Cardano项目) 是的,Cardano就是用Haskell来编写,(我这样渣渣也仅仅是阅读和学习)Haskell用户大部分都是教授或者是数学领域牛人

82230

热爱函数式你,句句纯正 Haskell【类型篇】

调试 目前 Haskell 主要编译器是 GHC,下载地址,你可以创建 .hs 文件,用 Notepad++ 打开。 GHCi 是 GHC 一部分,可以解析、调试 Haskell 程序。...也可以通过 :cd 命令,输入 runghc ,将 .hs 文件变成 .exe 文件执行; 类型 Haskell 类型属于强类型,即每一个数据或每一个函数都有非常精确、严格类型。...函数类型是本篇重中之重,前面的可以随意看看,但是从此节开始请务必细究。 函数可以理解为从参数到结果一个映射,比如T1 -> T2。...上图不在灰色方框内部分全部是类型类; Haskell 给很多“类型”分成了“类型类”,归为一类类型有着共同属性,不同类型所归类就称为类型类。...可以看出,Haskell 严格定义类型和 javaScript 中还是有较大差异,一个强类型,一个弱类型~ 强类型适合大型项目的维护,弱类型动态性结合,开发简单,处理灵活; Haskell 类型类

92330
您找到你想要的搜索结果了吗?
是的
没有找到

来看看几种 Monad来看看几种 Monad

当处理 non-determinism 时候,这代表我们有好几种选择可以选,我们也会每种选择都试试看,因此最终结果也会是一个 non-deterministic 值。只是包含更多不同可能罢了。...而且他包含了所有从 [3,4,5] 取值,套用 \x -> [x,-x] 后结果。这个函数他接受一个数值并产生两个数值,一个原来数值取过负号数值。...整套结构要表达意思就是对于 [1,2] 每个元素,以及 ['a','b'] 每个元素,我们产生一个 tuple,每项分别取自不同 list。...接着我们用 >> 来忽略掉空 tuple,而呈现不同结果。另一方面,如果 guard 失败的话,后面的 return 也会失败。...(c',r') 走过 list 中每一个元素,而 guard 会保证产生结果会停留在棋盘上。如果没有,那就会产生一个空 list,表示失败结果,return (c',r') 也就不会被运行。

98120

MYSQL 一个特殊需求在不同MYSQL配置产生不同结果 update 0 是否需要应用程序判断

配置中会产生什么样结果不同结果开发是否能接受问题。...MYSQL innodb_lock_wait_timeout =3 和 innodb_deadlock_detect = OFF 情况 在不同场合下,MySQL 在这两边有不同设置可能性,在一些早期...这里需要在不同情况下来分析,同样设置给应用程序带来不同问题。 这里先从互联网方案来说,死锁探测为0 innodb_lock_wait_timeout = 3 当然有的地方更短设置成1秒。...具体什么成因这里就不讨论了,同时这里还有一个不同就是隔离级别,我们在每次测试使用不同隔离级别来看看会有什么影响。...数据还在情况下,你会获得update 对应结果结果,如果相关行不在情况下,获得结果也是UPDATE 0 结果

8410

newtype_Haskell笔记8

类定义行为,具体见FunctorApplicative_Haskell笔记7 二.newtype ZipList就是因这个场景而产生,本质上是对List包装,定义如下: newtype ZipList...不像type创建别名类型可以原类型等价换用,newtype创建新类型原类型是完全不同东西,唯一联系是新类型内部实际操作是原类型(通过持有原类型实例引用),通过这种方式在外层实现对原类型扩展...除此之外,就与data关键字没什么区别了 P.S.关于值构造器参数,见类型_Haskell笔记3 三.对比type和data 关键字 作用 应用场景 data 定义自己(数据)类型 想要定义完全新类型...type 给现有类型起别名,得到东西完全等价于原类型,可无条件换用/混用 想让类型签名更清楚(语义化)时候 newtype 将现有的类型包成一个新类型,得到类型原类型不同,不能换用/混用 想让现有类型具有一种不同接口...(typeclass)实现时 四.newtype惰性计算 Haskell中大多数计算都是惰性(少数指的是foldl'、Data.ByteString之类严格版本),也就是说,计算只在不得不算时候才会发生

59430

深入typeclass_Haskell笔记4

零.TypeclassClass Typeclass就是Haskell接口定义,用来声明一组行为 OOP中Class是对象模板,用来描述现实事物,并封装其内部状态。...后两条函数实现是可选,通过间接递归定义来描述这两个函数关系,这样只需要提供一个函数实现就够了(这种方式称为minimal complete definition,最小完整定义) P.S.GHCi环境下...但无论怎样,fmap结果都是List a(这里a是类型变量) 听起来非常自然,因为List本就属于Functor类,并且: map :: (a -> b) -> [a] -> [b] 这不就是fmap...类似的,kind是类型类型,算是对类型分类 GHCi环境下,可以通过:kind命令查看类型类型,例如: > :k Int Int :: * > :k Maybe Maybe :: * -> * >...(即类型约束,经常在函数签名=>左边看到),例如Num,具体见What does has kind ‘Constraint’ mean in Haskell

45210

程序设计语言概述_c语言程序设计基本概念

数据信息 a) 编译时Meta-Data元数据(类型框架,空间占用) b) 运行时Meta-Data元数据(继承体系,用于new或者反射)(特别区别编译运行Meta-Data不同。)...至于寄存器安排,那是更下一层类似缓存策略算法结果。) 编译出来执行码汇编执行码有特征区别吗? 没有。特别是在编译器优化之后。 无法通过执行码,区分汇编和C程序。...模块堆栈操作 总之,经过优化C程序执行码汇编效率几乎相同。 因为从理论上来说,C并没有引入运行时新机制。 我理解C语言只是一种汇编宏而已。...JAVA编译执行过程是怎样? 1. 编译后产生一个基于堆栈字节码 2. JRE在不同OS上提供支持 3. 起初JRE是解释执行,效率低下。 a) 获取待执行下一个字节码。...c) 从操作数堆栈获取所需操作数。 d) 按照 JVM 规范执行操作。 e) 将结果写回堆栈。 JAVA是如何解决执行效率低下问题呢?

1.4K40

模块_Haskell笔记2

,不用关注环境区别,具体见import qualified in GHCI 二.声明 模块用来组织代码,比如把功能相近函数放到同一个模块中 例如二叉树模块定义: module BTree -- 声明要暴露出去函数及数据类型...,所以对应文件名应为BTree.hs 模块声明必须位于首行(之前不能有import之类东西,import可以放在where之后) 模块中数据结构导出import语法类似: module MyModule...类似,但返回第一个满足条件元素索引 findIndex :: (a -> Bool) -> [a] -> Maybe Int -- find类似,但返回所有满足条件索引 findIndices...Bool -- 八进制数 isOctDigit :: Char -> Bool -- 十六进制数 isHexDigit :: Char -> Bool -- 字母,功能等价于isAlpha,实现方式不同...Set.fromList 集合去重效率高于List.nub,但缺点是构造集合会对元素进行排序,所以得到去重结果不保留原顺序(List.nub会保留) 参考资料 Haskell/Modules Haskell

1.7K30

基础语法_Haskell笔记1

Haskell特点: 变量不可变:函数式里变量常量概念一样,源自数学思维,令x=1,那么x永远都是1 引用透明:函数调用能被直接替换成相应值,而不会影响函数行为。...== True会报错),但认为整型浮点型是可比(1 == 1.0是True) 运算符优先级 在GHCi环境可以通过info:命令查看运算符优先级,例如: > :i * class Num a where....匿名函数中->类型声明中->语义相同,都表示“映射到”(maps to) 函数组合 数学中函数组合表达方式是f·g(x) = f(g(x)),Haskell之类似: fg = f . g...作用域扩展到当前函数/List Comprehension,如果是在GHCi环境,在整个交互过程都可见 Case表达式 最常见case表达式就是函数定义时参数模式匹配(case表达式语法糖): tail...,是指从既有List按照一定规则产生另一个List。

1.8K30

以太坊主网上测试工具推荐

如果你想进行确定性测试(不会在星期二通过,而星期五失败),我强烈建议你使用dapp.tools.其背后使用hevm,这是HaskellEVM实现 使用Haskell编写EVM(而不是Python或JS...如果失败,则可能与你代码有关,而不是EVM实现有关。...你唯一需要关注应该是主网,网络ID为1。 如果你正在多个协议(例如OneInch,Curve,Uniswap,Aave,Compound等)进行交互,则很有可能。...ethtx.info堆栈跟踪示例 有用链接 etherscan - 通用区块链浏览器 bloxy - 更高级区块链浏览器 ethtx - 堆栈跟踪 4bytes - 函数签名数据库 furucombo...- 聚合了 defi 操作 dapp-pm - Dapp软件包管理器 eth95 - 可本地沙盒合约快速交互简单UI daistats - DAI统计信息一目了然 sassal.eth建议 -

1.2K20

铁定不纯IO_Haskell笔记5

写在前面 一直有个疑惑,Haskell号称纯函数式语言,那么铁定不纯场景(肯定有副作用,或者操作本身就是副作用)如何解决?...Haskell做法其实类似于ReactcomponentDidMount()等组件生命周期函数,React建议(道德约束)保持render()是纯函数,带有副作用操作挪到componentDidMount...Haskell提供了do语句块,也是用来隔离不纯部分 一.I/O action 先看个函数类型: > :t print print :: Show a => a -> IO () print函数接受一个...Promise.all感觉,接受一组promise,返回一个新promise携带这组结果 mapMmapM_ Control.Monad.mapM :: (Traversable t, Monad...,但丢弃结果,返回IO (),很适合print等不关心I/O Action结果场景: > mapM_ print [1, 2, 2] 1 2 2 forM Control.Monad.forM ::

1.3K30

软件质量黄金准则

社会分工 我是康威定律坚持拥趸者,根据该定律: 设计系统架构受制于产生这些设计组织(广义定义)沟通结构。—— 马尔文·E·康威 我有时将其解读为“社会分歧导致技术分歧”。...Haskell 社区内经典例子,cabal 堆栈分歧,源于 FPComplete Cabal 贡献者之间分歧(根据 Haskell reddit 子版块反馈修正)。...由于未能解决 upstream 收费贡献者开源贡献者之间摩擦,导致 downstream 需要通过创建并行安装工具这样技术解决方案来尝试绕开这个问题。...如此一来,Haskell 社区分崩离析,导致初次使用新手一头雾水并且用户体验极差。...(译注:对国人来说,一个更广为人知例子是 12306 电子售票系统:12306 问题 upstream 是春运期间庞大人流量铁路客运能力之间供求矛盾,而 downstream 则是 12306

53220

七夕送礼很发愁?自己编写一个区块链送女友吧~

但是为了使用该方法,我们需要一些实际字节进行散列。这意味着我们需要一种序列化反序列化 Blockchain 方法。...下面是序列化反序列化我们所需类型完整代码: 我仅包含了 deserialize serialize 从而使得模块最终结果更为清晰。...让我们将其交给 Data.Binary 中decode encode 。...我们将为其指定一个任意大整数从而避免没有现时标志值产生一个足够困难散列情况。而且因为我们需要调整我们困难度,所以每个块大致需要花费相同时间进行挖掘,我们将在头部存储一个时间戳。...your Own Blockchain in Haskell / 使用 Haskell 编写自己区块链 译者:mylxiaoyi 、CY2、Render、Pamela

883160

第二章 IBM-PC微机基本功能

3. 8086CPU结构(重点重中之重) (1)执行单元EU EU主要任务是分析执行指令,具体包括: 从指令队列中取出指令代码,由控制器译码后产生相应控制信号,控制各部件完成指令规定操作...2.奇偶标志位PF 当指令操作结果低8位中含有1个数为偶数时,则PF被置1,否则PF被置0。 注意:PF只反映操作结果低8位奇偶性,指令操作数长度无关。...注意:AF只反映运算结果低八位,操作数长度无关。 4.零值标志位ZF 若运算结果各位全为0,则ZF被置1,否则置0。...由于第7位是字节操作数符号位,而第15位是字操作数符号位,因此,SF位运算结果最高位(第7位或第15位)相同。...字数据表示范围为:-32768~+32767 注意:溢出进位是两个完全不同概念,不能相互混淆。

27220

JavaScript 是怎么运行起来

JavaScript 运行原理,是我面试时候经常会问到问题,但是根据过往面试结果来看,这部分能理解很清楚不足 20%,大多数同学热衷于去学习一些 Vue、React 这样框架,以及一些新...常见编译型语言有 C、C ++、Erlang、Haskell、Rust 和 Go。 解释型语言 解释型语言 是通过一个解释器逐行解释并执行程序每个命令。...Chrome 是一个多进程架构,我们打开一个浏览器时会启动多个不同进程协助浏览器将页面为我们呈现出来: 浏览器进程:浏览器最核心进程,负责管理各个标签页创建和销毁、页面显示和功能(前进,后退,收藏等...作为浏览器脚本语言, JavaScript 主要用途是用户互动,以及操作 DOM。这决定了它只能是单线程,否则会带来很复杂同步问题。...下面这个动图很好解释了整个运行过程: 调用堆栈每个条目被称为 堆栈帧。当调用堆栈一个 堆栈帧 需要大量时间才能被处理时,就会产生卡顿,因为浏览器没法做其他事情了。

57130

一个函数自白

最小执行单元是一条条语句,这些语句有机地组合起来完成一个或多个功能并且可以复用,这才是我——函数。 内存堆栈和我之间是啥关系? 有无参数我有何异同? 我简洁性?复杂度如何评估?...对我所采用不同内存使用策略,所带来不同结果给予适当关注,是件有意义好事情。 我运行环境——堆栈 明月松间照 清泉石上流 由于内存中东西太多了,于是把我运行环境中内存称为堆栈。...不要将这里堆栈数据结构中概念混淆,数据结构中堆是一个基于树数据结构。 有一种执行环境叫栈机器,使用了栈而不是寄存器来支持程序表达式计算,许多现代虚拟机都是这样,例如JVM。...不同类型值通常被分配不同大小内存空间,这意味着当发生类型不匹配时,内存可能被重写而变得不一致,这就是这类异常问题所在。...所有现代高级编程语言都有一个类型系统,在开发和执行过程中不同节点检测数据类型。静态类型语言如Java 和 Haskell,动态类型如JS,python等等。

75150

【译】A Deep-Dive into Flinks Network Stack(1)

通过Akka使用RPCTaskManagers和JobManagers之间协调通道相比,TaskManagers之间网络堆栈依赖于使用Netty低得多API。...它抽象了以下三个概念不同设置: 子任务输出类型(ResultPartitionType): 流水线(有界或无界):一旦产生数据就可以向下游发送,可能是一个接一个地,作为有界或无界记录流。...批处理作业生成有界结果分区,而流式处理作业产生无限结果。 批处理作业也可能以阻塞方式产生结果,具体取决于所使用运算符和连接模式。 在这种情况下,必须先生成完整结果,然后才能安排接收任务。...批处理作业也可能以阻塞方式产生结果,具体取决于所使用运算符和连接模式。 在这种情况下,必须先生成完整结果,然后才能安排接收任务。 这允许批处理作业更有效地工作并且资源使用更少。...() 物理运输 为了理解物理数据连接,请回想一下,在Flink中,不同任务可以通过插槽共享组共享相同插槽。

88240

Android卡顿监控系统

采样频率性能消耗 目前我们策略是判断一个卡顿是否发生耗时阈值是80ms(5*16.6ms),当一个卡顿达80ms耗时,采集1~2个堆栈基本可以定位到耗时堆栈。...做个最小估算,每天上报收集2000个用户卡顿文件,每个卡顿文件dump下了用户遇到10个卡顿,每个卡顿高频收集到30个堆栈,这就已经产生2000*10*30=60W个堆栈。...按照这个量级发展,一个月可产生上千万堆栈信息,每个堆栈还是几十行函数调用关系。这么大量信息对存储,分析,页面展示等均带来相当大压力。...当然,这两种方式聚类,从一定程度上分类大量的卡顿,但不太好控制是,究竟要取堆栈多少层作为识别分类。层数越多,则聚类结果变多,分类更细,问题零碎;层数越少,则聚类结果变少,达不到分类效果。...收集不同用户不同手机不同场景下所有卡顿堆栈信息,可供分析,定位和优化问题。

7.5K52

《广研Android卡顿监控系统》

采样频率性能消耗 目前我们策略是判断一个卡顿是否发生耗时阈值是80ms(5*16.6ms),当一个卡顿达80ms耗时,采集1~2个堆栈基本可以定位到耗时堆栈。...做个最小估算,每天上报收集2000个用户卡顿文件,每个卡顿文件dump下了用户遇到10个卡顿,每个卡顿高频收集到30个堆栈,这就已经产生20001030=60W个堆栈。...按照这个量级发展,一个月可产生上千万堆栈信息,每个堆栈还是几十行函数调用关系。这么大量信息对存储,分析,页面展示等均带来相当大压力。...分类前对每个堆栈,根据业务不同设置好过滤关键字,提取出感兴趣代码行,去除其他冗余系统函数后进行归类。...当然,这两种方式聚类,从一定程度上分类大量的卡顿,但不太好控制是,究竟要取堆栈多少层作为识别分类。层数越多,则聚类结果变多,分类更细,问题零碎;层数越少,则聚类结果变少,达不到分类效果。

4.4K51
领券