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

data,是对类型的定义

data Bool = False | True
data Int = -2147483648 | -2147483647 | ... | -1 | 0 | 1 | 2 | ... | 2147483647
data Shape = Circle Float Float Float | Rectangle Float Float Float Float

type,并不是用来创造新类,而是给一个既有类型提供一个别名。

type String = [Char]

instance,用来说明我们要定义某个 typeclass 的instance。当我们要定义 Eq ,我们会写 class Eq a where ,其中 a 代表任何型态。我们可以从 instance 的写法: instance Eq TrafficLight where 看出来。我们会把 a 换成实际的类型。

instance Eq TrafficLight where
    Red == Red = True
    Green == Green = True
    Yellow == Yellow = True
    _ == _ = False

class,定义一个新的 typeclass

class Eq a where
    (==) :: a -> a -> Bool
    (/=) :: a -> a -> Bool
    x == y = not (x /= y)
    x /= y = not (x == y)
class (Functor f ) => Applicative f where
    pure :: a -> f a
    (<*>) :: f (a -> b) -> f a -> f b

newtype,而在 Haskell newtype 正是为了这种情形,我们想将一个类型包在另一个类型中。在实际的函数库中 ZipList a 是这样定义了:

newtype ZipList a = ZipList { getZipList :: [a] }

newtype特点:只能定义单一一个值构造子,而且那个构造子只能有一个字段。

data特点:可以让那个类型有好几个值构造子,并且每个构造子可以有零个或多个字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值