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

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

我们从 wiki 上可以找到以下要点: Haskell 是一种标准化,通用函数式编程语言,有惰性求值和强静态类型; 在Haskell,“函数是第一类对象”。...调试 目前 Haskell 主要编译器是 GHC,下载地址,你可以创建 .hs 文件,用 Notepad++ 打开。 GHCi 是 GHC 一部分,可以解析、调试 Haskell 程序。...有理数类型 Rational,即用两个任意精度整数来表示一个小数,这在做高精度数学运算时有很多好处; Prelude> 0.75::Rational 3 % 4 String 字符串类型,String...每个类型类下面都写了一些该类型类预定义函数,我们可以接着打印输出体验: // fromInteger 是 Num 类型类下函数,可以将一个一个整数转为一个重载数类型 a Prelude> :t...,以及类型类底下各种函数,真的太好用了吧~ 不用理会类型转换,特别是像 js 隐式转换,真的太爽了~ 在逐渐学习过程,不断提升强类型设计精髓理解。

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

泛型和元编程模型:Java, Go, Rust, Swift, D等

我将描述三种不同完全通用元编程方法,看看它们是如何在泛型系统空不同方向进行扩展:像Python这样动态语言,像Template Haskell这样过程宏系统,以及像Zig和Terra这样阶段性编译...OCaml将这个想法更进一步,采用统一表示方式,没有需要额外装箱分配基元类型(就像Javaint需要变成Integer才能进入ArrayList一样),因为所有的对象要么已经被装箱,要么用一个指针大小整数表示...此功能还解释了Swift为何以允许在结构体添加和重新排列字段方式实现ABI稳定性,尽管它们出于性能原因提供@frozen属性以选择退出动态查找。...因此,我提到所有语言都有某种形式 "引用 "原语,你在语言中提供一个代码片段,它就会返回语法树。这些引用原语也提供方法来拼接语法树值,就像字符串拼接一样。下面是模板Haskell一个例子。...这就是泛型在Rust工作方式,在语言层面来说也是Swift和Haskell泛型工作方式

3K30

什么是好编程语言?

Haskell 遇到了一个「神秘元组问题」,因为尽管类型定义非常严格,但是每个函数组件可以有不同名称。...我喜欢从一个解决方案以声明方式创建函数图。但我讨厌当出了问题时候,我不知道问题在哪里。...不可变;纯函数 Haskell 一种理智、可调节内存模型, Java 单线程隔离, Dart 和 Javascript 通信顺序进程, Go 和 Ada 有安全检查规则, Rust...在最后一行,我们从 stdin 读取一系列行,并为每个行创建一个以 new line 结尾字符串,其中内容是解析为数组原始行,然后将其反转并流式输出。然后打印字符串。...OUT::write 在模板,我们首先创建一个表示当前状态对象,因此 N 是输入,n0 和 n1 是斐波那契函数种子。此对象被发送到匹配器。

2.6K20

Python基础—让你规范Python语言使用

)和一个符号名( empty-docstring )来标识....每个标识符源都用一种一致方式指示. x.Obj表示Obj对象定义在模块x. 缺点: 模块名仍可能冲突. 有些模块名太长, 不太方便. 结论: 使用 import x 来导入包和模块....如果需要, 全局变量应该仅在模块内部可用, 并通过模块级公共函数来访问. 嵌套/局部/内部类或函数 定义: 类可以定义在方法, 函数或者类. 函数可以定义在方法或函数....列表推导(List Comprehensions) 定义: 列表推导(list comprehensions)与生成器表达式(generator expression)提供了一种简洁高效方式创建列表和迭代器...注意在生成器函数文档字符串中使用”Yields:”而不是”Returns:”. Lambda函数 定义: 与语句相反, lambda在一个表达式定义匿名函数.

1.5K80

编程语言具备哪些特性?

Haskell 遇到了一个「神秘元组问题」,因为尽管类型定义非常严格,但是每个函数组件可以有不同名称。...我喜欢从一个解决方案以声明方式创建函数图。但我讨厌当出了问题时候,我不知道问题在哪里。...不可变;纯函数 Haskell 一种理智、可调节内存模型, Java 单线程隔离, Dart 和 Javascript 通信顺序进程, Go 和 Ada 有安全检查规则, Rust...在最后一行,我们从 stdin 读取一系列行,并为每个行创建一个以 new line 结尾字符串,其中内容是解析为数组原始行,然后将其反转并流式输出。然后打印字符串。...OUT::write 在模板,我们首先创建一个表示当前状态对象,因此 N 是输入,n0 和 n1 是斐波那契函数种子。此对象被发送到匹配器。

2K10

考虑使用Java SE 8Optional!

(请注意,它很快被包含在C#,并且被提出用于Java SE 7,但没有将其纳入该版本。)它工作原理如下: 诸如Groovy之类语言具有由“ ” 表示安全导航操作,?.用于安全浏览潜在空引用。...: "UNKNOWN"; 其他功能语言,Haskell和Scala,采取不同视图。Haskell包括一个Maybe类型,它基本上封装了一个可选值。...如果Optional对象为空,则不会打印任何内容。 您还可以使用该isPresent()方法来确定Optional对象是否存在值。...Optional使用flatMap方法级联对象 您已经看到可以重构使用几种模式Optional。那么我们如何以安全方式写下面的代码呢?...15 String toString() 返回此选项非空字符串表示,适合调试。

1.3K31

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

]*/ 1.10 查找所有c文件main函数 main type:c 二、使用技巧 一次查询就是一系列子句组合,一个子句前缀可能包括如下: “+”表示查询子句内容是必须;形如...+“clause” “-”表示查询子句内容是忽略;形如-“clause” “:”表示查询子句针对一个域搜索;形如文件类型type:c 一个子句也有可能是下面这些形式: 一个词语,表示查询所有包含该词语文档...;形如“term” 一个词组;表示查询所有包含该词组文档,形如“hello term” 嵌套或组合查询;通过“+”“-”组合或者形如”term1″”term2″… 逻辑运算查询;opengrok支持...例如搜索(1+1):2,完整搜索字符串如下: \(1\+\)\:2 需要特别注意是索引字符主要是数字,字母和下划线,一个字符是无法进行索引。...2.2 域 2.2.1 full 全量搜索,包括字符串,数字,标识符等。 2.2.2 defs 定义搜索,主要对变量,函数进行查询等。 2.2.3 refs 引用搜索,主要指符号函数,类,变量。

2.8K20

36 个JS 面试题为你助力金九银十(面试必读)

1.JSlet和const有什么用? 在现代js,let&const是创建变量不同方式。 在早期js,咱们使用var关键字来创建变量。...使用循环:首先,计算字符串字符数,然后对原始字符串应用递减循环,该循环从最后一个字符开始,打印每个字符,直到count变为零。 7.JS如何将页面重定向到另一个页面?...例如,如果两个对象具有相同属性和值,则它们严格不相等。 15. 如何在现有函数添加新属性 只需给现有函数赋值,就可以很容易地在现有函数添加新属性。...JS创建函数两种方法是函数声明和函数表达式。 函数声明 具有特定参数函数称为函数声明,在JS创建变量称为声明。...如何在JS编码和解码 URL encodeURI() 函数用于在JS对URL进行编码。它将url字符串作为参数并返回编码字符串。 注意: encodeURI()不会编码类似这样字符: / ?

7.2K30

Haskell网络编程:从数据采集到图片分析

你可以用不同URL替换上述示例"https://example.com"来获取你感兴趣数据。2. 使用代理IP技术在实际爬虫项目中,使用代理IP技术是非常重要,以避免被目标网站封锁。...Data.ByteString.Lazy.Char8 as L -- 导入字节串库main :: IO ()main = do manager <- newManager tlsManagerSettings -- 创建一个新管理器...假设你想要从爬取网页中提取图片链接并进行分析,你可以使用HaskellHTML解析库,tagsoup来解析HTML,并使用其他适当库来下载和分析图片。...do imageLinks <- getImageLinks "https://example.com" -- 调用函数获取图片链接 print imageLinks -- 打印图片链接...,使用Haskell图片处理库,JuicyPixels来下载和分析图片,例如获取图片尺寸、颜色、格式等信息。

22530

36 个JS 面试题为你助力金九银十(面试必读)

在现代js,let&const是创建变量不同方式。 在早期js,咱们使用var关键字来创建变量。...使用循环:首先,计算字符串字符数,然后对原始字符串应用递减循环,该循环从最后一个字符开始,打印每个字符,直到count变为零。 7.JS如何将页面重定向到另一个页面?...例如,如果两个对象具有相同属性和值,则它们严格不相等。 15. 如何在现有函数添加新属性 只需给现有函数赋值,就可以很容易地在现有函数添加新属性。...JS创建函数两种方法是函数声明和函数表达式。 函数声明 具有特定参数函数称为函数声明,在JS创建变量称为声明。...如何在JS编码和解码 URL encodeURI() 函数用于在JS对URL进行编码。它将url字符串作为参数并返回编码字符串。 注意: encodeURI()不会编码类似这样字符: / ?

6K20

Python 持久化 - 文件

文件 长久保存信息一种数据信息集合 常用操作 打开关闭(文件一旦打开,需要关闭操作) 读写内容 查找 open 函数 open 函数负责打开文件,带有很多参数 第一个参数:必须有,文件路径和名称 mode...:表明文件用什么方式打开 r:以只读方式打开 w:写方式打开,会覆盖以前内容 x:创建方式打开,文件已经存在,报错 a:append 方式,以追加方式对文件内容进行写入 b:binary 方式,二进制方式写入...t:文本方式打开 +;可读写 # 打开文件,用写方式 # r 表示后面字符串内容不需要转义 # f 称之为文件句柄 f = open(r"test01.txt", 'w') # 文件打开后必须关闭...f.close() # 此案例说明,以写方式打开文件,默认是如果没有文件,则创建 with 语句 with 语句使用技术是一种称为上下文管理协议技术(ContextManagementProtocol...文件写操作 - write write(str):把字符串写入文件 writeline(str):把字符串按行写入文件 区别: write 函数参数只能是字符串 writeline 函数参数可以是字符串

1K87

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

例如,当某人寻找一种用于操纵字符串、解码 JSON 或查询数据库函数时,就不会使用上述类型签名。 类型签名甚至可以用来在 Haskell 代码整个语料库搜索相关函数。...hoogle=Int+-%3E+Float),这会为我们指向有着合理命名 int2Float 函数Haskell 还允许我们使用以小写类型名称表示多个类型变量来创建多态类型签名。...我们 renderPost 函数可以直接用在单帖和多帖场景,而无需进行任何更改,因为将其与 fmap 组合一起使用改变了我们应用方式。...上述类型一种应用场景可以是基于发票状态创建一个通知消息函数。这个函数将 CustomerInvoice 作为参数,并返回一个表示通知内容字符串。...熟悉 SQL 开发人员都能想得到,以命令式方式编写代码来检索表存储为一系列行数据会非常麻烦。 Haskell 中支持 DSL 函数之一称为 Template Haskell

1.3K10

谈谈编程思想

这就是「对扩展开放,对修改封闭」一个最浅显例子。软件开发很多手段,继承,Observer pattern(观察者模式)目的就是实现OCP原则。...这里泛型编程是从抽象度角度来看问题 —— 即对算法和算法操作数据进行解耦。举个例子,我们要计算一个字符串表达式值:"3* 20 * 7 * 48"。...支持,想想你如何以如此优雅地方式实现这种mapping?...| x <- xs, odd x] 即使你没学过haskell,你也能立即领会这段代码意思。...其实随着语言进化,不少模式已经被整合在语言当中,比如iterator,有些已经固化到你写代码方式当中,比如bridge,decorator,有些在framework里在不断使用而你不知道,经典MVC

90460

【100 种语言速成】第 2 节:Emojicode

❗️ 结束参数列表 字符串和注释内容不一定是表情符号,但我也用我应用程序来制作花哨文字来为它们增添趣味。...➡️ 表示接受一个整数,并返回一个整数。↩️是回报。⁉️…❗ 是函数调用。还不错。 Y组合器失败 不幸是这些不能递归,所以这根本不起作用!...❗️ ➡️ fib- 创建一个新并将其分配给fib变量 fib i❗️ ➡️ x- 在实例上调用 fib,使用参数调用我们唯一方法i … - 定义一个名字为类(类名必须是表情符号) - 空构造函数...,我们需要为每个类创建一些构造函数,即使它不做任何事情 ❗️ n ➡️ …- 定义方法…❗️ 接受一个整数参数n并返回一个整数 ↩️ n➖1❗➕ n➖2❗- 递归调用, n➖1❗ 是this....即使 ASCII 符号显然还不够,所以符号被重用来表示十种不同东西(尝试列出 JavaScript 或实际上几乎任何语言中字符所有句法含义),以及像,这样{}字符串被用作假额外字符。!

63021

初探函数式编程---以MapReduceFilter为例

函数式编程--酷壳[1] 总结, 函数式编程三大特性; 数据不可变性 函数作为一等公民(函数可以像变量一样来创建/修改/传递 等) 尾递归优化(重用stack,减轻栈压力) 函数式编程用到几个技术...,而不是大量使用for循环 (有的也把Reduce称为fold;比较早期且经典函数式语言有OCaml, Lisp,Haskell等) 其实恰好对应PHParray_map()、array_reduce..., new_arr); } 这段代码主要使用了iter()、map()和collect()方法 首先,创建了一个与之前相同包含三个字符串数组 arr。...在 main 函数创建了一个整数切片 intset,其中包含了 1 到 10 整数。 接下来,通过调用 Filter 函数进行过滤操作。...这个闭包接受一个整数引用 &n,并返回一个布尔值,表示是否满足过滤条件。 filter 函数通过使用迭代器方法链式调用方式,对整数切片 arr 进行过滤。

21320

基础语法_Haskell笔记1

所以,经验原则是给所有负数字面量都带上括号,(-3) P.S.Haskell只有一个一元运算符,就是一元减号-,具体见Unary operator 逻辑运算 3个运算符:与(&&),或(||),非(not...,可以通过柯里化函数创建函数(partialFn = curriedFn 2)。...,函数名加空格分隔参数列表,=后面是函数体 2个特点: 声明顺序无所谓 函数名首字母不能大写,不能数字开头 P.S.数学里把相似的东西用x x' x''命名习惯表示,在Haskell里也可以这样做:...因为haskell自带currying,所以等价于 -- addThree x y z = x + y + z P.S.匿名函数->与类型声明->语义相同,都表示“映射到”(maps to) 函数组合...数学函数组合表达方式是f·g(x) = f(g(x)),Haskell与之类似: fg = f . g 用到运算符是.: (.) :: (b -> c) -> (a -> b) -> a ->

1.8K30
领券