рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдХреЛрдб рдЕрд░реНрдердХрддрд╛, 100% рд╢реБрджреНрдзрддрд╛, рд╕рдорд░реНрдерди рдореЗрдВ рдЖрд╕рд╛рдиреА рдФрд░ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЛ рд▓реБрднрд╛рдирд╛ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЙрдЪреНрдЪрддрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рднреА рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрдард┐рди рдХрд╛рдо рд╣реИ, рдФрд░ "рдЬрд╛рджреВ рдХреА рдЧреЛрд▓рд┐рдпрд╛рдБ" рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдХреЗ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рдХреЛрдЯрд▓рд┐рди рдЬреИрд╕реА рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЗрд╕реЗ "рдЫреЛрдЯреЗ" рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдХрдИ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдирд╣реАрдВ, рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХреЛрдВ рдХреЗред рджреВрд░ - рдПрдлрдЖрдИ рдХреЗ рдЕрдзрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЛ рдФрджреНрдпреЛрдЧрд┐рдХ рдкрд░рдорд╛рдгреБ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмреЗрд╣рддрд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдФрд░ рдЕрдм рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ!
рд╡рд┐рдЯрд╛рд▓реА рдмреНрд░реИрдЧрд┐рд▓реНрд╡рд╕реНрдХреА , рдПрдлрдкреА рдХреЗ рдПрдХ рд╢рд┐рдХреНрд╖рдХ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЧрдгрдирд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд, "рд╣рд╛рд╕реНрдХреЗрд▓ рдЗрди рдбреЗрдкреНрде" рдкреБрд╕реНрддрдХ рдХреЗ рд▓реЗрдЦрдХ рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ 2020 рд╕рдорд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рджрд╕реНрдп рдФрд░ рдЬреАрдПрдЪрд╕реА рд╕рдВрдХрд▓рдХ рдХреА рдкрд░реНрдпрд╡реЗрдХреНрд╖реА рд╕рдорд┐рддрд┐ рд╣реИред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЗрддрд┐рд╣рд╛рд╕
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╣рд╛рдирд┐рдпрд╛рдВ рд╣рдореЗрд╢рд╛ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЕрдХреНрд╕рд░ рд▓реЛрдЧ рдПрдПрдл рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
тАЬрдПрдХ рдмрд╛рд░ рдПрдХ рджреВрд░, рдмрд╣реБрдд рджреВрд░ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рд░рд▓, рд╕реАрдзреА рдФрд░ рдЕрдЪреНрдЫреА рдереАред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдХреНрд░рдорд╛рджреЗрд╢рд┐рдд рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ - рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ!
рддрдм рд╕рд┐рде рдбрд░рд╛рд╡рдиреЗ рд▓реЛрдЧ рдЖрдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: '' рд╕рднреА рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ! рдРрд╕реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реА рд╕рдмрдХреБрдЫ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред ''
рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ рддрд╛рдХрдд рд╣рд╛рд╕рд┐рд▓ рдХреА, рддреЛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ - рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреАрдВред рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдкреАрдбрд╝рд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред "рдореЛрдХреНрд╖ рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рдПрдХ рд╕реБрдВрджрд░ рдФрд░ рдЕрд░реНрдерд╣реАрди рддрд╕реНрд╡реАрд░ рдЦреАрдВрдЪрдирд╛ рд╣реИред

рдЬрдм рдЖрдк рдЪрд┐рддреНрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЦреБрд╢реА, рд╢рд╛рдВрддрд┐ рдФрд░ рд╢рд╛рдВрддрд┐ рдЖ рдЬрд╛рдПрдЧреА, рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╣рд╛рдиреА рд╕реБрдВрджрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реВрдВред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдлреИрд░рд╛рдбреЗ рдХреА рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд╣реИ - рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдЬрдиреНрдорд╕реНрдерд╛рди рдЬреЛ рддрдм рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред
рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рддрдЪреАрдд рдореЗрдВ, рдХрд┐ рд╡реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рдХрд┐ рд╡реЗ рдПрдлрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдХреЛ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП!
рдПрдлрдкреА рдХрд╛ рдореБрдЦреНрдп рдорд┐рд╢рди рдЕрдЪреНрдЫреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреА рднрд╛рд╖рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рдирд╛ рд╣реИред
рд╕рднреА рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреЛ рдлреИрд░рд╛рдбреЗ рдЬреИрд╕реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ - рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд┐рдЬрд▓реА рдкрд░ рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
рдЬреЙрди рдореИрдХрд╛рд░реНрдереА рд╕рдорд╛рд░реЛрд╣
рдЬреЙрди рдореИрдХрд╛рд░реНрдереА рд▓рд┐рд╕реНрдк рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред

рдлреЛрд░рдЯреНрд░рд╛рди 65 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдереАред рдЗрд╕рдХрд╛ рдПрдХ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рд╣реИ:
IF (I.NE.0) GOTO 40
STMT-1
STMT-2
40 STMT-3
I 0, ┬л40┬╗.
, , . ,
XIF(M, N1,N2)
, , : N1 N2.
: ┬лтАж ┬╗ , .
тАФ N1 N2. , ?
:
M==0 ? N1 : N2
. . , , - .
?
тАФ . 1977 . ┬л ?┬╗. тАФ тАФ , .

тАФ , .
- :
c := 0
for i := 1 step 1 until n do
c := c + a[i]*b[i]
тАФ .
. FP.
Def DotP = (Insert +) o (ApplyToAll x) o Transpose
тАФ
o
, , , .
тАФ тАФ , , .
. .
, - Java . , , , .

, , :
, .
:
fun countLinesInFiles(fnames: List<String>): Int
= fnames.map { File(it).readLines().size }
.sum()
Kotlin, , . ?
, , .
тАФ ┬лmap┬╗ тАФ .
, : , . it тАФ . тАФ sum().
,
map
Kotlin, , . , . тАФ
readLines
.
Haskell
, Haskell.
countLines :: FilePath -> IO Int
countLines = fmap (length . lines) . readFile
countLinesInFiles :: [FilePath] -> IO Int
countLinesInFiles = fmap sum . traverse countLines
, , . Haskell , , .
. , : , Int тАФ .
. ┬лIO┬╗, Haskell ,
-. ┬л ┬╗, Int, IO Int. , .
. тАФ Haskell. тАФ FilePath, IO Int тАФ . : , traverse тАФ , ┬лcountLines┬╗.
. ┬л. ┬╗ (
o
) тАФ . , .
┬лf. g┬╗ тАФ , ┬лx┬╗ ┬лf(g(x))┬╗. , . , . .
.
, , . тАФ , .
UML-. : , , , , .

Swift
, , - . Swift , , .
protocol Shape {
func area() -> Double
func diameter() -> Double
}
class Circle: Shape {
var r = 0.0
init(radius: Double) {
r = radius
}
func area() -> Double {
return 3.14 * r * r
}
func diameter() -> Double {
return 2 * r
}
}
class Square: Shape {
var s = 0.0
init(size: Double) {
s = size
}
func area() -> Double {
return s * s
}
func diameter() -> Double {
return sqrt(2) * s
}
}
, .
: , , тАУ , . .
, , .
func testShape(shape: Shape) {
print(shape.area())
print(shape.diameter())
}
. .
testShape(shape: Circle(radius: 5))
testShape(shape: Square(size: 5))
78.5
10.0
25.0
7.0710678118654755
, , , , - . тАУ , .
Haskell
Haskell, , Swift.
data Shape = Circle Double | Square Double
area :: Shape -> Double
area (Circle r) = 3.14 * r * r
area (Square s) = s * s
diameter :: Shape -> Double
diameter (Circle r) = 2* r
diameter (Square s) = sqrt 2 * s
. , ┬л ┬╗ тАФ . ┬л┬╗ . .
тАФ , , . Haskell тАФ . , .
:
> area (Circle 5)
78.5
> diameter (Circle 5)
10.0
> area (Square 5)
25.0
diameter (Square 5)
7.0710678118654755
тАФ тАФ , .
, Swift Haskell .
, ,
, . , , тАФ , тАФ , , .
тАФ , тАФ . тАФ , .
, : ? . .
, :
тАФ .
, Swift.
HaskellтАж
data Shape = Circle Double | Square Double
тАж Swift .
enum Shape {
case Circle(radius: Double)
case Square(size: Double)
}
. ┬л┬╗ , Swift ┬лenum┬╗, . , .
HaskellтАж
area :: Shape -> Double
area (Circle r) = 3.14 * r * r
area (Square s) = s * s
тАж Swift .
extension Shape {
var area: Double {
switch self {
case .Circle(let r): return 3.14 * r * r
case .Square(let s): return s * s
}
}
}
, тАФ .
Kotlin:
sealed class Shape {
data class Circle(val radius: Double): Shape()
data class Square(val size: Double): Shape()
}
fun area(sh: Shape): Double {
return when (sh) {
is Shape.Circle -> 3.14 * sh.radius * sh.radius
is Shape.Square -> sh.size * sh.size
}
}
, тАФ .
, Kotlin Swift ? , , , . , -, .
. , , , , , .
, , , - тАФ . . : тАФ . , , .
. .
. . тАФ - , тАФ , . тАФ .
тАФ тАФ . 20 , .
- ┬лVisitor┬╗. , , . , .
- .
- тАФ .
- .
- .
, ┬л ┬╗, . . , тАФ , .
, .
, : , , , . , .

Haskell. , , , ┬л┬╗ ?
, ┬л┬╗ тАФ .
тАФ ┬лComposite┬╗. . , .
, Kotlin тАФ .
val a = "Hello "
val b = "world"
val c = a + b
, : ┬л, ? ┬╗. , тАФ
- .
тАФ HTTP-. Kotlin :
val a = HttpReq("f","v1")
val b = HttpReq("f2","v2")
val c = a + b
Haskell , . HTTP- тАФ . HTTP-.
.
. - . тАФ , тАФ , . ┬лoptional chaining┬╗, , Swift.
if let johnsStreet = john.residence?.address?.street
{ /* SUCCESS */ } else { /* FAILURE */ }
, . ┬лjohn┬╗ тАФ .
: , , . тАФ . , else тАФ . .
Swift . , , , : .
Haskell, .
case residence john >>= address >>= street of
Just johnsStreet -> -- SUCCESS
Nothing -> -- FAILURE
,
┬л>>=┬╗ тАФ . .
Swift ┬лoptional chaining┬╗ . Kotlin . Haskell , ┬л>>=┬╗.
:
. . , . , тАФ , .
, тАФ .
┬л┬╗ . тАФ , . ┬л┬╗, . ┬л ┬╗ .
тАФ ?
. , тАФ .
,
тАФ . Haskell
┬лBuild Systems a la Carte┬╗ . Distinguished Paper Award International Conference on Functional Programming (ICFP) - 2018 . Build-, .
Build- Build- тАФ . .
data Store i k v
:
- i тАФ ;
- k тАФ , , ;
- v тАФ , , , .
тАФ . тАФ , . .
. , , . , - -, , .
тАФ
┬лTask┬╗ тАФ .
newtype Task c k v = Task { run :: forall f. c f => (k -> f v) -> f v }
Haskell, . , тАФ ┬лf┬╗, . , .
? ┬лk -> fv┬╗ тАФ - . . . Build-.
тАФ :
type Tasks c k v = k -> Maybe (Task c k v)
, , . ┬лMaybe┬╗ тАФ - ┬лoptional┬╗. , - - , .
Build-:
type Build c i k v = Tasks c k v -> k -> Store i k v
-> Store i k v
. k, . тАФ . , .
.
- Make,
- Shake тАФ Make Haskell,
- Bazel,
- Excel.
. тАФ Excel тАФ . Excel тАФ . , - . Make Excel - , .
тАФ
.
тАФ Haskell . , ., . - тАФ . , , . ,
.
, Haskell:
h :: [a] -> Int
h = length . filter p . map g . map f
тАФ . - , :
map f
тАФ f
;map g
тАФ g
;filter p
тАФ : , , ;length
тАФ тАФ .
:
тАФ , , тАж ! !, .
Fusion
┬лfusion┬╗, .
┬лfusion┬╗? -: :
c := 0
foreach (x : xs)
if p(g(f(x)))
then c := c + 1
,
(!),
(!). , , 2-3 .
, , , . тАФ .
, .
GPU? !
Haskell, :
dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float)
dotp xs ys = fold (+) 0 (zipWith (*) xs ys)
, Haskell: 2 , , . , Haskell GPU. GPU, : CUDA, Open CL тАФ , . Accelerate Haskell тАФ .
CUDA 100 , , . ! , . , .
тАФ . ? a, b, c D.
f :: A -> B -> C -> D
f a b c = ...
, тАФ . , :
f :: A -> B -> C -> D
f a :: B -> C -> D
f a b :: C -> D
f a b c :: D
, . , , - , . тАФ , , .
, , Scala -.
f :: A -> (B , C) -> D
f a p = тАж
f :: A -> B -> C -> D
f a :: (B, C) -> D
f a p :: D
: ┬л , . , . , тАФ ┬╗. .
, .
. Haskell 15 QuickCheck, .
, , :
reverse :: String -> String
reverse = ...
, . , .
> quickCheck (\s -> reverse (reverse s) == s)
+++ OK, passed 100 tests.
, . , 100, , , .
, , . . Haskell 15 . . , Swift Kotlin .
, ?
abs :: Int -> Int
abs x = if x < 0 then 0 - x else x
head :: [a] -> a -- !
head (x:_) = x
example :: Int -> Int
example x = if abs x < 0 then head [] else x
,
.
head :: [a] -> a -- !
head (x:_) = x
,
head
, тАФ .
┬лhead┬╗, ? , LiquidHaskell . LiquidHaskell тАФ Haskell-.
{-@ abs :: Int -> { n : Int | 0 <= n } @-}
abs :: Int -> Int
abs x = if x < 0 then 0 - x else x
{-@ head :: { xs : [a] | 1 <= len xs } -> a @-}
head :: [a] -> a -- !
head (x:_) = x
{-@ head :: { xs : [a] | 1 <= len xs } -> a @-}
head :: [a] -> a -- !
head (x:_) = x
, abs , n.
{-@ abs :: Int -> { n : Int | 0 <= n } @-}
abs :: Int -> Int
abs x = if x < 0 then 0 - x else x
, .
{-@ head :: { xs : [a] | 1 <= len xs } -> a @-}
head :: [a] -> a -- !
head (x:_) = x
, , . x x.
{-@ example :: x : Int -> { y : Int | x == y } @-}
example :: Int -> Int
example x = if abs x < 0 then head [] else x
, . , . , - . - - , , Eiffel, - .
?
-:
type MyAPI = Get '[PlainText] String
:<|> "conf" :> Get '[JSON] String
:<|> "year" :> Get '[JSON] Int
:<|> "like" :> Get '[JSON] Bool
myAPI :: Server MyAPI
= root :<|> year :<|> conf :<|> like
Haskell Servant, API . , url , , , JSON. , : String┬╗, Int┬╗, Bool.
.
root :: Handler String
root = pure "Welcome to my REST API"
conf :: Handler String
conf = pure "AppsConf"
year :: Handler Int
year = pure 2019 conf
like :: Handler Bool
like = pure True
тАФ , .
, . , , . тАФ .
тАФ . , . .
тАФ
┬л Haskell┬╗. 2018 . , . Haskell. 600 , .
┬лHaskell in Depth┬╗ . , , . ┬лslbragilevsky┬╗ 42%.
Saint AppsConf , Introductory- , . , , . , iOS, Android, - тАФ . , , .
telegram-, .