1 | :PROPERTIES:
|
---|
2 | :ID: 7f86ced4-b418-4cd4-a14e-d7e4f1f343de
|
---|
3 | :END:
|
---|
4 | #+title: Haskell
|
---|
5 | Функциональный язык программирования со строгой статической типизацией с выводом
|
---|
6 | типов.
|
---|
7 |
|
---|
8 | https://learnxinyminutes.com/docs/ru-ru/haskell-ru/
|
---|
9 |
|
---|
10 | Инструменты:
|
---|
11 | - GHC :: компилятор
|
---|
12 | - Hugs :: старый компилятор, который не используется
|
---|
13 | - GHCI :: REPL
|
---|
14 | - GHCId :: IDE-подобный REPL (с поддержкой Cabal)
|
---|
15 | - Cabal и Stack :: Утилиты сборки
|
---|
16 | - HLint :: Линтер
|
---|
17 | - Hindent :: Форматирование
|
---|
18 | - Hackage :: Пакеты Haskell
|
---|
19 | https://hackage.haskell.org
|
---|
20 | - Hoogle :: Что-то вроде apropos для Haskell
|
---|
21 | https://hoogle.haskell.org
|
---|
22 |
|
---|
23 | Элементы:
|
---|
24 |
|
---|
25 | - Анонимная функция
|
---|
26 | \x -> x * 10
|
---|
27 | map (\x -> x * 10) [1..5] -- [10, 20, 30, 40, 50]
|
---|
28 |
|
---|
29 | #+begin_src haskell
|
---|
30 | {- Управление приоритетом вычисления
|
---|
31 | В Haskell есть функция `$`, которая применяет
|
---|
32 | свой первый аргумент ко второму с наименьшим приоритетом
|
---|
33 | (обычное применение функций имеет наивысший приоритет)
|
---|
34 | Эта функция часто позволяет избежать использования
|
---|
35 | "лишних" скобок -}
|
---|
36 | head (tail (tail "abcd")) -- 'c'
|
---|
37 | head $ tail $ tail "abcd" -- 'c'
|
---|
38 | -- того же эффекта иногда можно достичь использованием композиции
|
---|
39 | (head . tail . tail) "abcd" -- 'c'
|
---|
40 | head . tail . tail $ "abcd" -- 'c'
|
---|
41 | #+end_src
|
---|