Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(%%) :: Int -> Int -> (Int, Int)
x %% y = (div x y, rem x y) -- это определение, а не вызов
mod :: Int -> Int -> Int -- NB: на самом деле библиотечное определение mod не такое; оно использует класс
x `mod` y = ...
(+ 2) -- то же самое, что \x -> x + 2
(2 `mod`) -- то же самое, что mod 2
curry :: ((a, b) -> c) -> (a -> b -> c)
uncurry :: (a -> b -> c) -> ((a, b) -> c)
curry :: ((a, b) -> c) -> a -> b -> c
uncurry :: (a -> b -> c) -> (a, b) -> c
a -> b -> c -> d -> f === a -> (b -> (c -> (d -> f)))
add x y = x + y -- prefix 'add', infix '+'
add x y = (+) x y -- prefix 'add', prefix '+'
x `add` y = (+) x y -- infix 'add', prefix '+'
x `add` y = x + y -- infix 'add', infix '+'
add2 x = (+ 2)
add2 x = (2 +)
add2 x = (`add` 2)
add2 x = (2 `add`)
Операторы можно составлять как угодно, за исключением следующих комбинаций:
« :: =… — @ \ | < — -> ~ => »
(=...)::Int->[Char]->[Char]
a =... b = show a ++ ' ' : b
ghci> :l src
[1 of 1] Compiling Main ( src.hs, interpreted )
Ok, modules loaded: Main.
ghci> let a = 123
ghci> let b = «asdf»
ghci> a =… b
«123 asdf»
ghci> (=...) a b
«123 asdf»
ghci>
Конспекты лекций «Haskell как первый язык программирования». Часть2