🟣 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 (БД).