「Learn LambdaCalculus」#0

前言

前段时间,GZTime也跟我聊过一些关于lambda演算的东西
学Haskell的时候也总是能听说这个东西
看起来挺有意思,来学学_(:з」∠)_

阅读全文

「Learn Haskell」#7 一些其它类型类

Foldable

Foldable是表示可以折叠(fold)的类型类,在Data.Foldable中定义,这使得和fold相关的函数可以用在任意Foldable的实例类型上。它的定义是:

阅读全文

「Learn Haskell」#A Haskell与范畴论

Haskell中的函子单子等都与范畴论(category theory)有很多联系,所以打算简单了解一下范畴论的相关内容。

范畴论是数学的一门学科,以抽象的方法处理数学概念,将这些概念形式化成一组组的“物件”及“态射”。数学中许多重要的领域可以形式化为范畴。使用范畴论可以令这些领域中许多难理解、难捉摸的数学结论更容易叙述证明。

———— 维基百科

范畴(Category)

范畴本质上是一个简单的集合,一个范畴$\mathbf{C}$包含三个组成成分:

阅读全文

「Learn Haskell」#6 半群与幺半群

Semigroup

半群(semigroup)是一个集合$S$,它需要指定一个二元运算符$\oplus$,并且满足

$$
a\oplus b \in S\quad a, b\in S
$$

以及结合(associative)律:

$$
(a\oplus b)\oplus c = a\oplus (b\oplus c)
$$

这个二元运算符在Haskell的Semigroup中被定义为<>函数:

阅读全文

「Learn Haskell」#5 函子、应用函子与单子

Functors

函子(Functor)是一个类型类(typeclass),和其他类型类一样,它规定了其实例类必须实现的功能(例如Eq类型类规定了它的实例必须是可以比较是否相等的),Functor规定类它的实例必须是可以进行映射的。Functor要求使用fmap :: (a -> b) -> f a -> f b 函数来实现这个功能,它接收一个a -> b类型的函数、一个内部元素为a类型的函子,返回一个内部元素为b类型的函子

阅读全文

「Learn Haskell」#3 类型与类型类

Types

Haskell有一个静态类型系统,任何变量、函数都会具有类型,并且有类型判断功能,没给出的类型会自动识别。
Type的首字母全为大写,常用的有:

  • Int:整型,有上下界范围,-2147483647~2147483648
阅读全文

「Learn Haskell」#2 高阶函数与模块

Higher Order Functions

Currying

Haskell中的函数是柯里化(Currying)的,可以看作所有函数都只接收一个参数,而接收两个参数的函数实际上是这个函数接收了第一个参数后返回了一个接收第二个参数的函数,然后用这个函数接收第二个参数,返回最终的结果。比如max函数,它的类型签名是:

阅读全文

「Learn Haskell」#0 总章

学习一门新语言之Haskell

前言

之前一直很好奇函数式编程,觉得Haskell挺有意思的,想学学
现在高考完放假了,可以有时间具体学一学了
这里没有Haskell的教程,只有我在学习Haskell时写下的笔记

阅读全文