Haskell 语法糖
Haskell 语法糖
总结
三大本质: Case >>= 函数
语法糖 | 本质 |
---|---|
模式匹配 | case |
If-Else | case |
Guard | case |
Do | >>= |
List Comprehension | >>= |
Let | lambda 函数 |
运算符段 | lambda 函数 |
中缀函数 | 前缀函数 |
Record | 取参函数 |
Range | enum 函数 |
String | [Char] |
\(~\)
Case
模式匹配
(x:xs) = x
case expr of
pattern -> expr
pattern -> expr
...
If-else
if predicate then expr else expr
case predicate of
True -> expr
False -> expr
Guard
f xs
| predicate = expr
| predicate = expr
| otherwise = expr
f xs = if predicate xs
then expr
else if predicate
then expr
else expr
\(~\)
>>=
do
do
x1 <- m1 m1 >>= \x1 ->
x2 <- m2 m2 >>= \x2 ->
..
xn <- mn mn >>= \xn ->
result result
List Comprehension
[result | x1 <- m1, x2 <- m2, ...]
m1 >>= \x1 -> m2 >>= \x2 -> result
\(~\)
函数
Let
let x = expr; y = expr in f x y
(\x y -> f x y) expr expr
运算符段
(+1)
(1+)
\x -> (+) x 1
\x -> (+) 1 x
中缀函数
x + y
(+) x y
Record
data T = T { A :: Int, B :: Bool }
data T = T Int Bool
A :: T -> Int
A (T x _) = x
B :: T -> Bool
B (T _ y) = y
Range
[1..5] -- 枚举
[1,3..10] -- 指定步长
enumFromTo 1 5 -- [1,2,3,4,5]
enumFromThenTo 1 3 10 -- [1,3,5,7,9]
\(~\)
别名
字符串 []
"Hello World"
['H','e','l','l','o',' ','W','o','r','l','d']