🟣 Haskell

Чистый функциональный язык: типы, функции, списки, монады.

Шпаргалки · Программирование · #haskell #functional

IDE и запуск

VS Code + Haskell Language Server, IntelliJ. Инструменты: GHC (компилятор), GHCi (интерактив), Cabal и Stack (сборка). ghc Main.hs, runghc Main.hs, cabal run.

Типы данных

n :: Int;  x :: Double;  c :: Char;  s :: String;  b :: Bool
xs :: [Int]           -- список
t :: (Int, String)    -- кортеж
m :: Maybe Int        -- Just 1 | Nothing
e :: Either String Int  -- Left err | Right ok
data Shape = Circle Double | Rect Double Double

Integer без ограничения размера, Int 64-бит.

Операторы

+ - * /, div, mod, == /= < >, && || not, ++ (склейка списков), : (добавить в голову), . (композиция), $ (применение), <$>, >>=.

Функции и «циклы»

Циклов нет: рекурсия и функции высшего порядка.

add :: Int -> Int -> Int
add a b = a + b

fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n - 1)

map (*2) [1, 2, 3]
filter even [1 .. 10]
foldr (+) 0 [1, 2, 3]
[x * x | x <- [1 .. 5], odd x]       -- list comprehension

Встроенные

head, tail, length, reverse, take, drop, zip, sum, maximum, show, read, putStrLn, fmap, mapM_.

Ввод-вывод и асинхронность

main :: IO ()
main = do
  name <- getLine
  putStrLn ("Привет, " ++ name)

Параллелизм: Control.Concurrent (forkIO), MVar, пакет async, STM.

Коллекции

Data.Map, Data.Set, Data.Vector, Data.Text.

Библиотеки по задачам

Servant, Scotty, Yesod (веб), aeson (JSON), lens, megaparsec (парсеры), QuickCheck, HSpec (тесты), persistent (БД).