summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20210423140625-haskell.org
blob: ddf7ca25e4bf79fa2e1054a1fcddcb3c42b957a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
:PROPERTIES:
:ID:       7f86ced4-b418-4cd4-a14e-d7e4f1f343de
:END:
#+title: Haskell
Функциональный язык программирования со строгой статической типизацией с выводом
типов.

https://learnxinyminutes.com/docs/ru-ru/haskell-ru/

Инструменты:
- GHC :: компилятор
- Hugs :: старый компилятор, который не используется  
- GHCI :: REPL
- GHCId :: IDE-подобный REPL (с поддержкой Cabal)
- Cabal и Stack :: Утилиты сборки
- HLint :: Линтер
- Hindent :: Форматирование    
- Hackage :: Пакеты Haskell
  https://hackage.haskell.org
- Hoogle :: Что-то вроде apropos для Haskell
  https://hoogle.haskell.org  
  
Элементы:

- Анонимная функция
  \x -> x * 10
  map (\x -> x * 10) [1..5] -- [10, 20, 30, 40, 50]

#+begin_src haskell
{- Управление приоритетом вычисления
В Haskell есть функция `$`, которая применяет
свой первый аргумент ко второму с наименьшим приоритетом
(обычное применение функций имеет наивысший приоритет)
Эта функция часто позволяет избежать использования
"лишних" скобок -}
head (tail (tail "abcd")) -- 'c'
head $ tail $ tail "abcd" -- 'c'
-- того же эффекта иногда можно достичь использованием композиции
(head . tail . tail) "abcd" -- 'c'
head . tail . tail $ "abcd" -- 'c'
#+end_src