Haskell的newtype研究

scala-newtype:Scala的NewType,没有运行时开销 立即下载

代码

data BookType = History | Music deriving (Show,Eq)
newtype  MyBook  = MyBook{bookname::BookType -> String}
newtype HisBook = HisBook{headBook::BookType -> Int->String}
newtype HerBook i r = HerBook{lowBook::i -> r}

解释说明

第一个是无参构造的多值类型
第二个带有一个构造函数的newtype类型,需要实现其bookname函数才能实例化出来
第三个带有两个构造函数,需要实现其headBook函数才能实现出来
第四个和第二个在实现上一致,但是其类型不是MyBook,而是HerBook i r。i,r取决于实现的lowBook的方式。
采用第四种的方式,主要含义是在进行Monad时,保留部分类型约束。如果仅有一个类型参数(例如Maybe a),那么在进行>>=运算时,会丢掉a的类型。那么HerBook i r的i就会被丢掉。我们就不知道到底是HerBook BookType类型,还是HerBook String类型了。


-- (show $ toUpper.head bt) ++ ":" ++ (show count)
main = do
    let c = MyBook{bookname = \bt -> show bt}
    let d = HisBook{headBook = \bt count -> (show $ toUpper.head $ show bt)++ ":" ++ (show count)}
    let e = HerBook{lowBook = \bt -> (show $ map toLower $show bt)}
    let f = HerBook{lowBook = \bt ->  length $ show bt}
    print $ bookname c History
    print $ headBook d History 14
    print $ lowBook e History
    print $ lowBook f History

接下来是同义转换

newtype History t a = History {observe :: t -> a }
d::History Int Int
d = History $ \x -> (x + 1)



data HistoryData t a = HistoryData t
myobserve :: HistoryData t a -> (t->a) -> a
myobserve (HistoryData t) f = f t
haskell-resources:基本的Haskell论文清单 基本的Haskell论文清单 关于许可的快速说明 此回购是指向各种论文的链接的集合,因此,随着资源在网络上的混乱,它可能会间歇性地过时。 如果人们在这些pdf包含无效链接时提出问题,将不胜感激,因为它可以帮助我们所有人维护最新的资源集。 此外,您可能会发现“链接集”方法很繁琐。 这样做是为了避免任何形式的许可问题。 如果有人对托管实际论文的含义(尤其是许可)有更好的了解,则理想的最终目标将是充当一种图书馆。 随时找我讨论。 谢谢,艾米丽。 历史 开始:Eugenio Moggi论文 命题作为类型 Haskell语义和设计空间 Haskell的通用派生机制 真正的产品总和 功能依赖 等级n类型 在Haskell中键入Haskell 类型家庭 输入Families pt。 2个 GADTs Haskell中的一流模块 实物促销 克莱斯里的暴走之箭 引擎盖下(做香肠的地方) 浮动 平行 立即下载

相关推荐

告别CANoe?手把手教你用Python+PCAN搭建汽车诊断脚本(附完整代码)

本文详细介绍了如何利用Python和PCAN硬件搭建高性价比的汽车诊断自动化方案,替代昂贵的CANoe工具。通过开源库python-can和udsoncan实现UDS诊断协议,涵盖硬件选择、环境配置、核心功能实现及性能优化,附完整代码示例,助力开发者快速构建诊断脚本。

weixin_42551227的博客 373

Haskell趣学指南-学习笔记 函数概念-01

函数概念-01 data type intance class newtype

m0_58773982的博客 153

【数据集处理】DroneVehicle数据集处理方法

DroneVehicle数据集由无人机采集的56,878张图像组成,其中一半是RGB图像,其余为红外图像。作者为这五个类别制作了带有定向边界框的丰富注释。

qq_44102942的博客 5046

haskell类型入门

newtype 只能定义单一构造器,并且该构造 器只能有且仅有一个参数。这样一来,data 关键字是可以完全代替 newtype 的,但反之则可 能不成立。左边的book是类型或者类型构造器(type constructor),右边的book是data constructor。:t Book // 查看类型构造器的类型。参数化类型是需要类型参数的类型。3. 定义参数化类型。

weixin_46772961的博客 147

告别手动刷金币:零代码配置实现番茄小说自动化任务

本文详细介绍如何利用零代码配置工具实现番茄小说自动化任务,告别手动刷金币的烦恼。通过冰狐智能辅助工具的可视化配置和元数据复用功能,用户无需编程基础即可快速设置自动签到、观看广告等任务流程,大幅提升效率并避免断签风险。

weixin_42522953的博客 295

别再只调包了!深入理解机器学习虚拟筛选中的分子指纹(ECFP/Morgan)

本文深入探讨了ECFP/Morgan分子指纹在机器学习虚拟筛选中的应用与优化策略。通过解析半径参数与比特长度的化学意义,揭示了如何通过参数调优提升模型性能20%以上,特别适用于药物发现领域的高通量筛选。文章还提供了工程实践中的参数优化策略和多指纹融合技术,为开发者提供从理论到实践的全面指导。

weixin_33704234的博客 829

Haskell语言的数据类型

在Haskell中,程序员可以定义自己的数据类型,以便更好地表达程序的需求。这通常通过data关键字来实现。haskellhaskellHaskell的类型系统是其强大能力的基础。通过使用基本数据类型、自定义数据类型、类型类和模式匹配,程序员可以构建出功能强大且易于维护的程序。理解这些数据类型的高级特性,可以帮助我们写出更安全、优雅的代码。函数式编程的魅力在于其抽象能力和灵活性,而Haskell的类型系统则为这种抽象提供了坚实的基础。

2501_90195257的博客 387

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 119

Haskell 的 自定义类型(data、type)

Haskell的type类型、data类型、以及递归data以及IO type 的使用、lazy evaluation 使用与优势

m0_74209411的博客 1583

使用CloudCompare和CANUPO进行点云分类的编程指南

在本文中,我们将介绍如何使用CloudCompare和CANUPO库进行点云分类的编程。CloudCompare是一款功能强大的开源点云处理软件,而CANUPO是一个用于点云分类和分割的C++库。这只是一个简单的点云分类示例,CANUPO库还提供了其他更高级的功能和算法,以满足各种点云分类需求。该函数接受点云数据、地面点掩码和非地面点掩码作为输入,并将分类结果存储在这两个掩码向量中。完成安装后,我们可以开始编写点云分类的代码。最后,我们遍历点云数据,并根据地面点和非地面点的掩码将结果打印出来。

ByteWhisper的博客 1058

基于点云数据的统计滤波算法改进

随着三维视觉和点云处理技术的发展,点云数据在机器人、自动驾驶、增强现实等领域得到了广泛应用。而点云数据中常常包含着各种噪声和异常点,这些噪声和异常点会影响后续的数据处理和分析任务。因此,对点云数据进行滤波处理是必不可少的一步。在点云滤波算法中,统计滤波(Statistical Filtering)是一种常见且有效的方法。它通过对点云数据进行统计分析,将噪声和异常点剔除或修复,从而得到更为准确和可靠的点云数据。本文将介绍一种改进的统计滤波算法,并提供相应的源代码实现。

QfcaLinux的博客 292

Haskell语言学习笔记(9)State Monad

State Monad

zwvista的专栏 3007

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

LambdaHack源代码漫游:探索Haskell实现的Roguelike核心算法

LambdaHack是一个基于Haskell的roguelike游戏引擎库,提供了构建ASCII风格地牢爬行游戏的完整框架。本文将深入探索其源代码中实现的三大核心算法:地牢生成、视野计算和路径搜索,展示Haskell函数式编程在游戏开发中的独特优势。 ## 一、地牢生成:程序化创造无限可能 🗺️ LambdaHack的地牢生成系统位于`engine-src/Game/LambdaHack/S

gitblog_00047的博客 353

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Brittany测试套件深度剖析:500+测试用例如何保证格式化质量

Brittany作为Haskell源代码格式化工具,其核心竞争力在于通过500+测试用例构建的严谨测试体系。本文将深入解析Brittany测试套件的架构设计、用例覆盖策略及质量保障机制,揭示这款工具如何通过自动化测试确保代码格式化的准确性与稳定性。 ## 测试套件架构:从文件系统到自动化验证 Brittany的测试框架采用文件驱动的设计模式,核心实现位于[source/test-suite/M

gitblog_01417的博客 954

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Alga图类型系统深度解析:Graph、AdjacencyMap与Labelled Graph对比

Alga是Haskell中用于代数构造和操作图的强大库,提供了多种图类型以满足不同场景需求。本文将深入对比三种核心图类型:基础`Graph`、高效`AdjacencyMap`和灵活的`Labelled Graph`,帮助开发者理解它们的设计理念、适用场景及性能特性。 ## 基础图类型:Graph数据结构 `Graph`类型是Alga的核心抽象,通过深度嵌入图构造原语(`empty`、`vert

gitblog_00042的博客 1006

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Haskell学习笔记3 -- Monoid

首先先比较一下data,type和newtype type关键字用于创建类型别名,仅仅是给已知类型赋予一个新名字 比如 type IntList = [Int] 并没有创建值构造器,[Int]和IntList只是引用同一个类型的两种方式 newtype关键字用来将已知类型包裹为新类型 newtype CharList = CharList {getCharList :: [Char]} 我们不能用++来拼接一个CharList和一个类型为[Char]的列表,也不能用++来拼接两个Ch.

weixin_54634208的博客 467

type vs data vs newtype in haskell

type type 关键字用来设置类型别名,提高代码可读性。 我们可以类比 shell 里面的 alias 命令,它是用来设置命令别名的。譬如下面的 shell 命令: $ alias aria2-server="aria2c --conf-path ~/aria2.conf" 我们用 aria2-server 来代替 aria2c --...

weixin_33726318的博客 398

Haskell的Yesod技术大全

haskell yesod

daaoke的专栏 1911

Haskell 状态Monad (State Monad)的理解

1、State s a数据类型 State s a是一种用来封装状态处理函数(又叫:状态处理器):\s -> (a,s’)的数据结构,因为State封装的是一个状态处理器(state processor)而不是状态s本身,所以称State为State类型(type)是不准确的。 newtype State s a = State { runState :: s -> (a,s) } -...

天涯爱生活 2817

Haskell之Yesod开发–边踩坑边开发(1)

在Yesod中载入Template文件

daaoke的专栏 871

Haskell语言学习笔记(1)

函数, 列表解析, (.), ($), data, type, newtype, 类型类(typeclass)

zwvista的专栏 3112

Haskell

最近一段时间在学习ruby on rails.迷上了脚本语言.就如beyond java说的:"今天的 Java 程序员可以通过学习其他方式和语言受益。Java 技术曾经是编程阵营中所有开发项目的最佳选择,但这种情况已经发生了变化。其他框架正在塑造 Java 框架的构建方式,从其他语言中学到的概念有助于 Java 编程。所编写的 Python(或 Ruby、Smalltalk 或 ... 请自由填...

善待人生,笑对生活... 346

使用Hacker Typer像黑客一样开心打字[极客乐趣]

Are you looking for a quick bit of good fun to “impress” your less computer-savvy family and friends with? Then you need Hacker Typer. Hacker Typer lets you produce awesome looking “1337 code” with ju...

cum88284的博客 3130

haskell基本语法

定义新类型 data EmployeeInfo = Employee Int String String [String] deriving(Read, Show, Eq, Ord)    EmployeeInfo是新的类型名称,或者说是类型标识 Employee是构造函数的名称 *Main> :t Employee Employee :: I...

weixin_34072458的博客 985

『阿男的Haskell进阶学习笔记』*02 `type`关键字*

『阿男的Haskell进阶学习笔记』*02 type关键字* 我们这次介绍两个关键字,分别是type和newtype。 首先是type,这个关键字可以允许我们来把一种data type给做一下命名。比如我们常用的String,实际上就是[Char]的代名词,我们可以通过ghci的:i命令验证这...

chujian7232的博客 331
上一篇: sbt使用自定义仓库
下一篇: 在MR中创建数据到hive中使用
brant_yan
博客等级 码龄22年 27粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值