Haskell笔记 数据类型
Haskell笔记 数据类型
查看数据类型
:: 读作"它的类型为"
:t 'a' -- 'a' :: Char
:t 123 -- 123 :: Num p => p
:t True -- True "" Bool
:t "hello" -- [Char]
:t ('a', True) -- ('a', True) :: (Char, Bool)
:t (1, True) -- (1, True) :: Num a => (a, Bool)
-- 函数的类型
test x = x + 1 -- test :: Num a => a -> a
testc x = 'a':x -- testc :: [Char] -> [Char]
testl x y = 'a':x++y -- testl :: [Char] -> [Char] -> [Char]
常见数据类型
关键字 | 名称 | 注意 |
---|---|---|
Int | 整型 | -263~2263-1 |
Integer | 整型 | 一般是无界的 |
Float | 单精度浮点数 | |
Double | 双精度浮点数 | |
Bool | 布尔型 | True, False |
Char | 字符型 | |
元组 | 它的类型取决于其中项的类型和数目 |
类型变量
代表任意类型
-- 下面的函数可以处理列表, 无论列表中装有的数据是什么类型
-- a, b代表任意类型
:t head -- head :: [a] -> [a]
:t fst -- fst :: (a, b) -> a
类类型(typeclass)
类类型是定义行为的入口, 是一组函数的集合
-- Eq类型, 用于判断两个变量是否相等
:t (==) -- (==) :: Eq a => a -> a -> Bool
:t (/=) -- (/=) :: Eq a => a -> a -> Bool
-- Ord类型, 用于比较两个变量大小
:t (>) -- (>) :: Ord a => a -> a -> Bool
:t (<) -- (<) :: Ord a => a -> a -> Bool
:t (>=) -- (>=) :: Ord a => a -> a -> Bool
:t (<=) -- (<=) :: Ord a => a -> a -> Bool
-- Show类型, 将实例转换为字符串
-- 常用函数为show
show 1 -- "1"
:t show -- show :: Show a => a -> String
-- Read类型, 将字符串转换为其他类型
read "1" + 1 -- 2
read "1" :: Float -- 1.0
read "[1, 2, 3, 4, 5]" :: Int
:t read -- read :: Read a => String -> a
Enum类类型
Enum的每个值都有前驱(succ)和后继(pred)
其包括 Bool, Char Ordering, Int, Integer, Float, Double
['a'..'d'] -- [a, b, c, d]
[1..3] -- [1, 2, 3]
succ 1 -- 2
pred 'c' -- 'b'
succ False -- True
Bounded类型类
Bounded类型类的实例类型都有一个上限(maxBound)和一个下限(minBound)
maxBound :: Int -- 9223372036854775807
maxBound :: Char -- '\1114111'
minBound :: Bool -- False
maxBound :: (Int, Bool) -- (9223372036854775807,True)
Num类型类
标识数值的类型类
包括Int, Integer, Float, Double
Floatle类型类
包括Float和Double
Integeral类型类
包含所有整数类型(Int, Integer)