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

在Haskell Core类型定义中,AppTy和FunTy有什么不同?

在Haskell Core类型定义中,AppTy和FunTy是两种不同的类型构造器。

  1. AppTy(Application Type)是用于表示类型应用的构造器。它接受两个类型作为参数,表示将一个类型应用到另一个类型上的结果。通常用于表示函数类型的应用。例如,AppTy (AppTy (ConTy "->") t1) t2 表示一个函数类型,其中 t1 是参数类型,t2 是返回类型。
  2. FunTy(Function Type)是用于表示函数类型的构造器。它接受两个类型作为参数,表示函数的参数类型和返回类型。例如,FunTy t1 t2 表示一个函数类型,其中 t1 是参数类型,t2 是返回类型。

总结:

  • AppTy 用于表示类型应用,将一个类型应用到另一个类型上。
  • FunTy 用于表示函数类型,包含参数类型和返回类型。

这两种类型构造器在类型定义中的使用方式和语义不同,但它们都是用于构建复杂类型的基本构造器。在实际编程中,可以根据需要使用这些构造器来定义和操作不同的类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Haskell

Haskell是一种标准化的、通用纯函数式编程语言,非限定性语义强静态类型Haskell,函数是一等公民。...官网:https://www.haskell.org/ 如果你兴趣继续往下阅读,不妨跟我一起了解了解它。...通过官网,你可以下载到它的运行环境,目前Haskell根据你不同的场景需求,提供了几种安装包,最小的尝试,我们可以从Minimal installers开始,你可以根据你的操作系统平台来选择下载Core...ghc包含了三个主最要的部分: ghc 编译器 ghci 交互式解析器调试器 runghc 以脚本的方式运行Haskell 而我们即将学习的起点就是ghci来练习Haskell的基本语法。...回归语言Haskell,函数式的编程其实有一点上,大家都很清楚,用很少的代码来完成一件事情。Haskell还可以定义跟数学的过程一一对应,这就很有意思了。

83130

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

我们从 wiki 上可以找到以下要点: Haskell 是一种标准化的,通用的纯函数式编程语言,惰性求值强静态类型Haskell,“函数是第一类对象”。...注:我们使用命令 :t 来查看类型Haskell 常用数据类型: Bool 布尔类型只有 True False 两个值,注意大小写;同样支持“或与非”运算: True||False True...上图不在灰色方框内的部分全部是类型类; Haskell 给很多“类型”分成了“类型类”,归为一类的类型有着共同的属性,不同类型所归的类就称为类型类。...,如果定义了一个新的类型,只要这个类型实现了类型声明的函数这个类型就属于该类型类了; 小结 入门第一篇,类型程序语言中非常重要!...可以看出,Haskell 的严格定义类型 javaScript 还是较大差异,一个强类型,一个弱类型~ 强类型适合大型项目的维护,弱类型与动态性结合,开发简单,处理灵活; Haskell类型

92830

newtype_Haskell笔记8

一.ZipList与List List场景,xs ys表示从左侧xs取出函数作用于右侧ys的每一项,两种实现方式: 笛卡尔积 拉链式的一一结对 分别对应[]ZipList,例如: import...类定义的行为,具体见Functor与Applicative_Haskell笔记7 二.newtype ZipList就是因这个场景而产生的,本质上是对List的包装,定义如下: newtype ZipList...除此之外,就与data关键字没什么区别了 P.S.关于值构造器与参数,见类型_Haskell笔记3 三.对比typedata 关键字 作用 应用场景 data 定义自己的(数据)类型 想要定义完全新的类型...(typeclass)实现时 四.newtype与惰性计算 Haskell中大多数计算都是惰性的(少数指的是foldl'、Data.ByteString之类的严格版本),也就是说,计算只不得不算的时候才会发生...不知道,因为按照约定,data关键字定义的数据类型可以多个值构造器,即便只声明了一个,它也要找过才知道。

59830

什么 Haskell 是我们构建生产软件系统的首选

3Haskell 有助于快速开发、无忧重构并具备出色的可维护性 将 Haskell 上述的静态类型纯函数样式结合后, Haskell 开发软件的速度往往会非常快。...5Haskell 非常适合域建模防止域逻辑错误 Haskell类型系统除了简单的编译时类型检查之外还有一个好处,那就是它可以应用程序中使用自定义数据类型来对问题域进行建模。...与类方法编码类似规则的做法(常见于不具有 sum 类型的面向对象语言)相比,这是一组更强大的保证。例如,使用上述类型,就无法定义没有应付金额的 CustomerInvoice。...这段代码被 Haskell 程序消费,这样就不需要编写约 150 行 Haskell 代码来定义所有数据类型用于处理这三个表数据的访问器函数了。...10结论 为什么 Haskell 是我们构建生产软件系统的首选编程语言呢?原因很多。我们再来回顾一下这篇文章列举的各个因素: Haskell 具有强大的静态类型系统,可以预防错误并减少认知负担。

1.3K10

从 Java JavaScript 来学习 Haskell Groovy(类型系统)

这就是使用 TypeChecked 以后,Groovy 纯静态类型+类型推断的 Haskell 的区别。...值得一提的还有: 方法重载从编译时到运行时:方法重载的选择静态语言里面全部都是编译期确定的,编译期认为参数的类型什么就是什么,这是在编译期间就已经明确的事情(参阅 《画圆画方的故事》,一个很明确的例子...这 SQL 的 select 1 from xxx 再求和的写法没啥区别嘛。 2、模式匹配。这大概是 Haskell 我最喜欢的部分。模式匹配在函数的定义里面使用起来简直太漂亮了。...考虑到 typeclass 本身是一个表示行为的定义,一方面很像接口,另一方面又很像 Java 的 “重载”,同一个方法接受不同的 type 参数,执行不同的逻辑,而且同样是编译期确定。...,继承接口实现区分得最清晰,不同关键字,语义清楚。

52550

从 Java JavaScript 来学习 Haskell Groovy(汇总)

Java JavaScript 位列其中,从表的分别可以看出二者的分别:因为 Java 有线程的概念,可以写并发编程范型的代码;泛型的定义,可以进行泛型编程;专门的 Class 类,可以反射自省...这里提到 “多范型”,其实这个概念定义也不精确,大致来说,除了 Haskell,我们今天讨论的三门其它的语言,都算是多范型的编程语言。例如用 Java 也可以写函数式编程的代码,但是需要避免使用状态。...擅长表现面向对象的范型,限制也很多,不容易搞破坏,但是讽刺的是,它本身却存在非对象的原语类型,就是 int、float、double 等等这些东西,这个不足 Groovy 中被修复。...纵览编程范型之后,再来回顾一下之前几篇的内容,欢迎移步阅读: 《从 Java JavaScript 来学习 Haskell Groovy(引子)》,记载了写这一系列文字的初衷,以及为什么选这几门语言...《从 Java JavaScript 来学习 Haskell Groovy(类型系统)》,介绍了从类型角度看编程语言的几个重要概念,比如动态/静态类型类型推导,强/弱类型,结构类型鸭子类型

48910

什么是好的编程语言?

Haskell 遇到了一个「神秘元组问题」,因为尽管类型定义非常严格,但是每个函数的组件可以不同的名称。...除了类型安全性,Haskell 似乎真的没有踩雷,所以我们可能根本没有错过完美的语言。继续向前! 一门语言中我想要什么样的特性?...其它有用的特性记录结构将数值限制范围内的能力等。 Forth 玩起来很有趣,但没什么用。我记得最清楚的是,几乎没有什么是预先定义的,你某种程度上定义了你自己的语言。...撇开我的偏好不谈,他们似乎有着非常相似的生产率配置文件,而且我不知道什么足够的客观原因来选择其中一个(除了平台问题,因为反正没有人使用.NET core)。...OUT::write 这里我们一个不同类型的函数,一个 composer,它接受一个 unicode 字符流并将它们解析到第一行的产品,一个「word」产品数组。

2.6K20

好的编程语言具备哪些特性?

Haskell 遇到了一个「神秘元组问题」,因为尽管类型定义非常严格,但是每个函数的组件可以不同的名称。...除了类型安全性,Haskell 似乎真的没有踩雷,所以我们可能根本没有错过完美的语言。继续向前! ? 一门语言中我想要什么样的特性?...其它有用的特性记录结构将数值限制范围内的能力等。 Forth 玩起来很有趣,但没什么用。我记得最清楚的是,几乎没有什么是预先定义的,你某种程度上定义了你自己的语言。...撇开我的偏好不谈,他们似乎有着非常相似的生产率配置文件,而且我不知道什么足够的客观原因来选择其中一个(除了平台问题,因为反正没有人使用.NET core)。...OUT::write 这里我们一个不同类型的函数,一个 composer,它接受一个 unicode 字符流并将它们解析到第一行的产品,一个「word」产品数组。

2K10

热爱函数式的你,句句纯正的 Haskell【表达式篇】

:t isFive isFive :: (Eq a, Num a) => a -> Bool JS 还有一个大不同是:Hskell 里的 if..then..else 的 else 后的表达式不可省略...; 也就是说,必须定义条件成立的时候返回的值,也必须定义条件不成立的时候返回的值,并且两者返回的类型必须相同,这样一定程度上保证了函数定义的完整性。...可以 GHC 控制台打印类型看看: Prelude> :t (+) (+) :: Num a => a -> a -> a Prelude> :t (-) (-) :: Num a => a -> a...-> a 只不过它们属于不同位置的运算符(前缀、中缀、后缀、混合位置); 实际上,运算符共有 3 个属性: 优先级( Haskell 十个优先级(0 ~ 9)); 结合性(分为左结合、右结合...、无结合); 位置(前、、后、混合); 提供一个优先级结合性的表: 图片来源:异步社区 比如运算符 !!

1.1K30

基础语法_Haskell笔记1

非函数式思维:通过命令告诉电脑要做什么,比如求和是通过循环结构遍历所有的数,相加并记录其 函数式思维:通过函数来描述出问题是什么,比如求和是把第一个数与其余树的相加 P.S.关于思维模式的差异,请查看一场函数式思维模式的洗礼...:编译器会做静态类型检查,这没什么奇怪的,但还支持强大的自动类型推断,所以多数情况不必声明类型,这样既拥有了静态类型检查的好处,还保证了代码简洁程度 P.S.引用透明(Referential transparency....匿名函数的->与类型声明的->语义相同,都表示“映射到”(maps to) 函数组合 数学的函数组合的表达方式是f·g(x) = f(g(x)),Haskell与之类似: fg = f . g...(10, 50) sArea = show area -- 可以定义函数 addSpace s = ' ' : s -- where可以嵌套,辅助函数定义辅助函数.../函数列表结束了没) 子句中声明的变量函数的作用域是当前函数及其guard,且不包括同名函数的其它模式 子句中可以用模式匹配 允许嵌套使用,辅助函数也可以自己的where子句中声明需要的变量辅助函数

1.8K30

选Python还是选Java?2020年,顶尖程序员最应该掌握的7种编程语言

C:一把菜刀一口炒锅,一个很好用的灶,隔壁个菜市场。 Java:碎菜器,切菜机,绞肉机,和面机,烤箱,微波炉…… Python:大超市的速冻柜台,要成品有成品,要半成品半成品,什么都有。...AI 编程的问题,因为每一个项目中,不同的目标需要特定的方法。...为了理解 Prolog,你必须熟悉一些指导 Prolog 工作的基本术语: 事实(Fact)定义了正确的陈述; 规则(Rule)定义附加条件的陈述; 目标(Goal)根据知识库定义了提交陈述的位置;...涉及到 Lisp 的著名项目 Reddit HackerNews。 说到 Lisp,这是世界上最美的语言——至少 Haskell 出现之前是这样。...Haskell 是纯粹的函数式和静态类型的编程语言,与惰性计算短代码配合使用。

1.3K00

老司机乱谈『代码之美』 ——不要束缚了自己前进的脚步

另外这里出现的do_with  keep_doing都是配合该模式的一些函数(看名字也可以大概猜出来干啥的),兴趣可以参考源文件future-util.hh(业界良心有注释)。...虽然只是一个小小的机制,但是带来的收益确是巨大的,整个框架这种机制把各个模块连接成了一个整体。回调那种丑陋的代码到处都有就不再举例了。...队列的定义与初始化 队列的轮询处理 smp_message_queue的定义 这里看到了内存洁癖,工匠精神。...这里2块数据,发送端的统计(Acore使用),接收端的统计(Bcore使用),中间插入了一个其他的数据结构。...作者解释为了避免cpu的prefecther造成A core的Cacheline B core的Cacheline加载了相同的内容 。这里多解释一下,如果多加载了会造成什么现象。

40910

函数式编程很难,这正是你要学习它的原因

这并不是语法的问题;HaskellML语言完全基于一种不同的概念、一种新的语言范式。你需要用不同的方式开发应用,不同的方式组织应用,不同的方式扩展应用。   ...这些叠加起来的复杂因素导致了不出意外的结果:很多人不情愿函数式编程学习投入时间。很容易理解这种不情愿,我干嘛不把花在学习这些东西的时间用在实现什么东西上呢?...一个像软件技术这样日新月异的产业里,我不认为这是正确的判断。   眼见为实   学习一种函数式编程语言最显而易见的好处是,你能学会这种类型语言中的函数式概念。...至少你需要做的事情是定义用来描述mapperreducer的声明。如果你好奇心,请试着用你喜欢的面向对象语言描述一个最小化的面向对象的MapReduce。我发现那是非常罗嗦的。...这种定义方式几乎是滑稽可笑的,但它能让你想到函数式概念。另外一个好例子是Scala语言如何利用完备的Java Fork/Join 类库,把它轻松的集成的自己的自有语法

1K51

C++、Python、Rust、Scala 构建编译器的差异性究竟有多大?

这是个难得的机会,我可以同样的大型项目下比较不同的实现,而且我的朋友们的水平也跟我很相近,所以我可以借这个机会看看不同的设计语言选择。...造成这种差异的最大原因很可能是动态类型。我们的ast.rs类型定义就占了500行,编译器的其他部分还有更多的类型定义。我们还通过类型系统做了各种类型限制。...Python只需要一个大约10行的函数即可递归地访问AST结点的各个域(通过__dict__属性)。 作为Rust和静态类型语言的爱好者,我需要指出,类型系统非常有助于避免bug提高性能。...仔细检查他们的代码后,我发现了许多不同的设计决定: 他们采用了完整类型的解析树,而不是标准的、基于字符串的同态解析树。...因此需要更多类型定义,以及解析过程需要更多的转换代码,或者需要更复杂的解析生成器。

1.4K40

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

函数本质 Haskell 里变量的值绑定后不会改变,所有变量一定意义上可以理解为定值。 无论如何,定义过的值是没法再改变的。...Haskell 值与函数是统一的,函数只是需要其他参数输入的值。如果定义的是函数,那么这个函数的行为在运行过程也是不会改变的,对于某一个特定的输入返回的结果总是确定的,这样的函数为纯函数。...再三强调, Haskell ,函数与值没有本质的区别,它可以是单一的定值,也可以是任意两个函数间的映射; 实际上, Haskell 世界里,所有的运算符号都可以被看做是函数,如加号 + 是一个需要两个参数的函数...+7 是一个没有名字的匿名函数, Haskell ,通常用 λ 表达式来构造匿名函数; 阶段小结 小结,我们再来回归三种定义函数的方式: // 方式 1: f2(x,y)=4*x+5*y+1...以上,真的要在编译器敲一敲才会有更多体验。看看不同语言对于函数申明及调用的不同实现,体会函数式编程参数函数的输入、传递 ...... 我是掘金安东尼,输出暴露输入,技术洞见生活,再会~

32710

【OpenGrok代码搜索引擎】四、OpenGrok使用指南

一、使用案例 1.1 查询函数”start_kernel”的定义 def:start_kernel 案例如下: 1.2 查询路径”sound/core”路径下使用函数”sprintf” refs:...lib/Makefile” 1.8 查找所有包含”. c”的文件 “. c” 1.9 查找以“ma”开头的文件 path:/ma[a-zA-Z]*/ 1.10 查找所有c文件的...模糊查询;使用“~”进行模糊或近似查询,例如res~; 范围查询; 2.1 特殊字符 opengrok查询语法中支持转义字符;这些特殊字符如“+ – && || !...例如搜索(1+1):2,完整的搜索字符串如下: \(1\+\)\:2 需要特别注意的是索引字符主要是数字,字母下划线,一个字符是无法进行索引。...2.2.2 defs 定义搜索,主要对变量,函数进行查询等。 2.2.3 refs 引用搜索,主要指符号如函数,类,变量。 2.2.4 path 资源文件路径搜索,如”src/mypath”。

2.8K20
领券