15. data Bool = True | False
positive :: Int → Bool
positive x = x > 0
16. data Bool = True | False
positive :: Int → Bool
positive x = x > 0
max :: (Ord a) => a → a → a
max x y
| x > y = x
| otherwise = y
17. data Person = Person {
firstName :: String,
lastName :: String,
birthYear :: Int
} deriving (Show)
18. data Person = Person {
firstName :: String,
lastName :: String,
birthYear :: Int
} deriving (Show)
alex = Person {
firstName = "Александр",
lastName = "Алексеев",
birthYear = 1988
}
19. class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
20. class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
instance Eq Person where
x == y = birthYear x == birthYear y
21. class Eq a where
(==), (/=) :: a -> a -> Bool
x /= y = not (x == y)
x == y = not (x /= y)
instance Eq Person where
x == y = birthYear x == birthYear y
x /= y = not (x == y)
22. anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
23. anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
24. anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
25. anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
anton == alex False
26. anton = Person {
firstName = "Антон",
lastName = "Алексеев",
birthYear = 1991
}
alex == anton False
alex == alex True
anton == alex False
anton /= alex True
28. instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
29. instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
30. instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
max alex anton
31. instance Ord Person where
compare x y = compare (birthYear y) (birthYear x)
instance Ord Person where
x `compare` y = birthYear y `compare` birthYear x
max :: (Ord a) => a → a → a
max alex anton
birthYear (max alex anton) == 1988
34. max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
35. max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
36. max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
37. max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
max' anton :: Person
38. max :: (Ord a) => a → a → a
max :: (Ord a) => a → (a → a)
max' = max alex
max' :: Person → Person
max' anton :: Person
birthYear (max' anton) == 1988
70. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
71. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (x → x + 5) [1,2,3] == [6,7,8]
72. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
73. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
74. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl (s x -> x + s) 0 [1, 2, 3] == 6
75. filter :: (a -> Bool) -> [a] -> [a]
filter (x -> x `mod` 2 == 0) [1..10] == [2, 4, 8, 10]
map :: (a -> b) -> [a] -> [b]
map (+5) [1,2,3] == [6,7,8]
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl (s x -> x + s) 0 [1, 2, 3] == 6
sum = foldl (s x -> x + s) 0
100. Зачем все это нужно:
– Настоящая кроссплатформенность
101. Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
102. Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
103. Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
104. Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
– Строгая типизация
105. Зачем все это нужно:
– Настоящая кроссплатформенность
– Автоматическое управление памятью
– Отсутсвие побочных эффектов
– Автоматическое распараллеливание
– Строгая типизация
– и не только
110. Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
111. Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
112. Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
113. Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
– модули ядра Linux
114. Что можно написать на Haskell?
– CLI-приложения (например, Darcs)
– GUI-приложения (wxHaskell, gtk2hs, etc)
– веб-приложения (Yesod, Happstack, etc)
– компиляторы, парсеры (Alex, Happy)
– модули ядра Linux
– и многое другое