SlideShare a Scribd company logo
1 of 78
Download to read offline
Stanfy MadCode #9
Alexander Voronov iOS Developer @ Stanfy
https://www.facebook.com/MadCodeMeetup
Functional
Programming 101
With Swift
What is Functional
Programming?
Functional Programming
• Higher-order functions
Functional Programming
• Higher-order functions
• Immutable states & pure functions
Functional Programming
• Higher-order functions
• Immutable states & pure functions
• Declarative
Functional Programming
• Higher-order functions
• Immutable states & pure functions
• Declarative
• Modularity
Functional Programming
• Higher-order functions
• Immutable states & pure functions
• Declarative
• Modularity
• Types
Swift Power
Swift Power
• First Class Functions
Swift Power
• First Class Functions
• Currying
Swift Power
• First Class Functions
• Currying
• Generics
Swift Power
• First Class Functions
• Currying
• Generics
• Type Inference
Swift Power
• First Class Functions
• Currying
• Generics
• Type Inference
• Enums
First Class Functions
func add(x: Int) -> Int -> Int {
return { y in y + x }
}
let addOne = add(1)
addOne(2)
// 3
First Class Functions
func addTwo(x: Int) -> Int {
return x + 2
}
(1...5).map(addTwo)
// [3, 4, 5, 6, 7]
Currying
func add(a: Int)(b: Int) -> Int {
return a + b
}
let addOne = add(1)
let xs = 1...5
xs.map(addOne)
// [2, 3, 4, 5, 6]
Currying
func curry<A, B, C>(f: (A, B) -> C)
-> A -> B -> C {
return { a in { b in f(a, b) } }
}
Generics
func printEach<T: SequenceType>(items: T) {
for item in items {
print(item)
}
}
printEach(1...5)
printEach(["one", "two", "three"])
Type Inference
let x = 42.0
x.dynamicType // Double
x is Double // true
Type Inference
var xs = [1, 5, 2, 4, 3]
xs.sort(<)
print(xs)
// [1, 2, 3, 4, 5]
Type Inference
var xs = [1, 5, 2, 4, 3]
xs.sort(<)
print(xs)
// [1, 2, 3, 4, 5]
Type Inference
let xs = [1, 5, 2, 4, 3]
let ys = xs.sorted(<)
print(xs) // [1, 5, 2, 4, 3]
print(ys) // [1, 2, 3, 4, 5]
Type Inference
let xs = [1, 5, 2, 4, 3]
let ys = xs.sorted(<)
print(xs) // [1, 5, 2, 4, 3]
print(ys) // [1, 2, 3, 4, 5]
Enumerations
enum Fruit: String {
case Apple = "apple"
case Banana = "banana"
case Cherry = "cherry"
}
Fruit.Apple.rawValue
// "apple"
Enumerations
enum ValidationResult {
case Valid
case NotValid(NSError)
}
Enumerations
enum MyApi {
case xAuth(String, String)
case GetUser(Int)
}
extension MyApi: MoyaTarget {
var baseURL: NSURL { return NSURL(string: "")! }
var path: String {
switch self {
case .xAuth: return "/authorise"
case .GetUser(let id): return "/user/(id)"
}
}
}
https://github.com/Moya/Moya
Optionals
enum Optional<T> {
case None
case Some(T)
}
var x = 5
x = nil
// Error!
Optional Chaining
struct Dog { var name: String }
struct Person { var dog: Dog? }
let dog = Dog(name: "Dodge")
let person = Person(dog: dog)
let dogName = person.dog?.name
Optional Chaining
struct Dog { var name: String }
struct Person { var dog: Dog? }
let dog = Dog(name: "Dodge")
let person = Person(dog: dog)
let dogName = person.dog?.name
Optional Chaining
Functors,
Applicatives,
Monads
Functors, Applicatives,
Monads
let x = 2
x + 3 // == 5
Functors, Applicatives,
Monads
let x = 2
x + 3 // == 5
let y = Optional(2)
Functors
let y = Optional(2)
y + 3
// Error!
// Value of optional type
// Optional<Int> not unwrapped
Functors
let y = Optional(2)
y.map { $0 + 3 }
// Optional(5)
Definition
Optional<T> == T?
Functors
func map<U>(f: T -> U) -> Optional<U> {
switch self {
case .Some(let x):
return f(x)
case .None:
return .None
}
}
Functors
infix operator <^> {
associativity left
}
func <^> <T, U>(f: T -> U, a: Optional<T>) -> Optional<U> {
return a.map(f)
}
Functors
func <^><T, U>(f: T -> U, a: Optional<T>) -> Optional<U> {
return a.map(f)
}
let addOne = { $0 + 1 }
addOne <^> Optional(2) // Optional(3)
Functors
func <^><T, U>(f: T -> U, a: Optional<T>) -> Optional<U> {
return a.map(f)
}
let addOne = { $0 + 1 }
addOne <^> Optional(2) // Optional(3)
add <^> Optional(2) <^> Optional(3)
Functors
func <^><T, U>(f: T -> U, a: Optional<T>) -> Optional<U> {
return a.map(f)
}
let addOne = { $0 + 1 }
addOne <^> Optional(2) // Optional(3)
add <^> Optional(2) <^> Optional(3)
Applicative
func apply<U>(f: Optional<(T -> U)>) -> Optional<U> {
switch f {
case .Some(let someF):
return self.map(someF)
case .None:
return .None
}
}
Applicatives
infix operator <*> { associativity left }
func <*><T, U>(f: Optional<(T -> U)>, a: Optional<T>) -> Optional<U> {
return a.apply(f)
}
Applicatives
infix operator <*> { associativity left }
func <*><T, U>(f: Optional<(T -> U)>, a: Optional<T>) -> Optional<U> {
return a.apply(f)
}
func add(a: Int)(b: Int) -> Int {
return a + b
}
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
let a = add <^> Optional(2)
Applicatives
add <^> Optional(2) <*> Optional(3)
// Optional(5)
let a = add <^> Optional(2)
let a: (b: Int) -> Optional<Int>
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
g: (T, T) -> Optional<T>
Monads
typealias T = Double
let f: T -> T = { $0 * 2.0 }
let g: (T, T) -> T = { $0 / $1 }
f(g(4, 2))
g: (T, T) -> Optional<T>
g(4, 2) >>- { f($0) }
Monads
>>-==
http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
Monads
func flatten<U>(a: Optional<Optional<U>>) -> Optional<U> {
switch a {
case .Some(let someA):
return someA
case .None:
return .None
}
}
Monads
func flatMap<U>(f: T -> Optional<U>) -> Optional<U> {
return flatten(map(f))
}
Monads
func flatMap<U>(f: T -> Optional<U>) -> Optional<U> {
return flatten(map(f))
}
func map<U>(f: T -> U) -> Optional<U>
Monads
func flatMap<U>(f: T -> Optional<U>) -> Optional<U> {
return flatten(map(f))
}
func map<U>(f: T -> U) -> Optional<U>
Monads
func flatMap<U>(f: T -> Optional<U>) -> Optional<U> {
return flatten(map(f))
}
func map<U>(f: T -> U) -> Optional<U>
func map<Optional<U>>(f: T -> Optional<U>) -> Optional<Optional<U>>
Monads
infix operator >>- { associativity left }
func >>-<T, U>(a: Optional<T>, f: T -> Optional<U>) -> Optional<U> {
return a.flatMap(f)
}
Monads
func half(a: Int) -> Optional<Int> {
return a % 2 == 0
? a / 2
: .None
}
Monads
func half(a: Int) -> Optional<Int> {
return a % 2 == 0
? a / 2
: .None
}
Optional(8) >>- half >>- half
// Optional(2)
Monad Laws
• Left Identity
• Right Identity
• Associativity
Left Identity Law
let f = { Optional($0 + 1) }
let a = 1
let x = Optional(a) >>- f
let y = f(a)
x == y
Right Identity Law
func create<T>(value: T) -> Optional<T> {
return Optional(value)
}
let x = Optional(1) >>- create
let y = Optional(1)
x == y
Associativity Law
let double = { Optional(2 * $0) }
let triple = { Optional(3 * $0) }
let x = Optional(1) >>- double >>- triple
let y = Optional(1) >>- { double($0) >>- triple }
let z = { Optional(1) >>- double }() >>- triple
x == y
y == z
Recap
Functor
map<U>(f: T -> U) -> M<U>
Applicative
apply<U>(f: M<(T -> U)>) -> M<U>
Monad
flatMap<U>(f: T -> M<U>) -> M<U>
Pipes & Railways
@ScottWlaschin
Pipes
infix operator |> { associativity left }
public func |> <T, U>(x: T, f: T -> U) -> U {
return f(x)
}
let addTwo = { $0 + 2 }
let prodThree = { $0 * 3 }
5 |> addTwo |> prodThree |> print
// 21
Pipes
let transformedX = x
|> addTwo
|> prodThree
|> increment
|> square
|> pow
VS
(pow(square(increment(prodThree(addTwo(x))))))
Railways
http://fsharpforfunandprofit.com/posts/recipe-part2/
Argo JSON Parser
+
Argo Runes
Argo Example
extension Model: Decodable {
static func decode(json: JSON) -> Decoded<Model> {
return Model.create
<^> json <| "id"
<*> json <| "room"
<*> json <| "guest_name"
<*> json <| "status"
<*> json <| "label"
<*> json <|? "user_comment"
<*> json <| ["channel", "label"]
<*> json <| "severity"
<*> json <|| "epochs"
<*> json <|| "body"
}
}
Argo Example
let entities: [Model]?
entities = data?.json()
>>- { $0["entities"] }
>>- decode
ReactiveCocoa Example
valueLabel.rac_text <~ viewModel.selectedIndex.producer
|> ignoreNil
|> combineLatestWith(viewModel.items.producer)
|> filter { index, items in
index < items.count
}
|> map { index, items in
items[index]
}
Where Next?
elm-
lang.or
g
www.erlan
g.org
fshar
p.org
https://
www.haskell.or
g
https://github.com/ReactiveCocoa/
ReactiveCocoa
https://github.com/
ReactiveX/RxSwift
https://github.com/
typelift/Swiftz
https://
github.com/
thoughtbot/Argo
www.objc.io/books/fpinswift/
fsharpforfunandprofit.com/posts/recipe-part2/
adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
Where Next
• Functors, Applicatives and Monads in Pictures
• Railway Oriented Programming
• Functional Programming in Swift (Objc.io)
• Argo
• Swiftz
• RxSwift
• ReactiveCocoa-3.0
• Haskell, F#, Erlang, Elm
Thanks!
Comments / Questions?
@aleks_voronova-voronov

More Related Content

What's hot

The Ring programming language version 1.8 book - Part 29 of 202
The Ring programming language version 1.8 book - Part 29 of 202The Ring programming language version 1.8 book - Part 29 of 202
The Ring programming language version 1.8 book - Part 29 of 202Mahmoud Samir Fayed
 
Functional Patterns for the non-mathematician
Functional Patterns for the non-mathematicianFunctional Patterns for the non-mathematician
Functional Patterns for the non-mathematicianBrian Lonsdorf
 
Functional programming from its fundamentals
Functional programming from its fundamentalsFunctional programming from its fundamentals
Functional programming from its fundamentalsMauro Palsgraaf
 
The Ring programming language version 1.9 book - Part 31 of 210
The Ring programming language version 1.9 book - Part 31 of 210The Ring programming language version 1.9 book - Part 31 of 210
The Ring programming language version 1.9 book - Part 31 of 210Mahmoud Samir Fayed
 
An introduction to functional programming with go
An introduction to functional programming with goAn introduction to functional programming with go
An introduction to functional programming with goEleanor McHugh
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional SwiftJason Larsen
 
λ | Lenses
λ | Lensesλ | Lenses
λ | LensesOpen-IT
 
Implementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxImplementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxEleanor McHugh
 
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...Philip Schwarz
 
The Ring programming language version 1.5.1 book - Part 21 of 180
The Ring programming language version 1.5.1 book - Part 21 of 180The Ring programming language version 1.5.1 book - Part 21 of 180
The Ring programming language version 1.5.1 book - Part 21 of 180Mahmoud Samir Fayed
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheetGil Cohen
 
iRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat SheetiRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat SheetSamuel Lampa
 

What's hot (18)

The Ring programming language version 1.8 book - Part 29 of 202
The Ring programming language version 1.8 book - Part 29 of 202The Ring programming language version 1.8 book - Part 29 of 202
The Ring programming language version 1.8 book - Part 29 of 202
 
Functional Patterns for the non-mathematician
Functional Patterns for the non-mathematicianFunctional Patterns for the non-mathematician
Functional Patterns for the non-mathematician
 
Python programming : Standard Input and Output
Python programming : Standard Input and OutputPython programming : Standard Input and Output
Python programming : Standard Input and Output
 
Millionways
MillionwaysMillionways
Millionways
 
Functional programming from its fundamentals
Functional programming from its fundamentalsFunctional programming from its fundamentals
Functional programming from its fundamentals
 
Kotlin class
Kotlin classKotlin class
Kotlin class
 
The Ring programming language version 1.9 book - Part 31 of 210
The Ring programming language version 1.9 book - Part 31 of 210The Ring programming language version 1.9 book - Part 31 of 210
The Ring programming language version 1.9 book - Part 31 of 210
 
An introduction to functional programming with go
An introduction to functional programming with goAn introduction to functional programming with go
An introduction to functional programming with go
 
7 Habits For a More Functional Swift
7 Habits For a More Functional Swift7 Habits For a More Functional Swift
7 Habits For a More Functional Swift
 
λ | Lenses
λ | Lensesλ | Lenses
λ | Lenses
 
Implementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxImplementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 redux
 
Oh Composable World!
Oh Composable World!Oh Composable World!
Oh Composable World!
 
Pooya Khaloo Presentation on IWMC 2015
Pooya Khaloo Presentation on IWMC 2015Pooya Khaloo Presentation on IWMC 2015
Pooya Khaloo Presentation on IWMC 2015
 
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
Side by Side - Scala and Java Adaptations of Martin Fowler’s Javascript Refac...
 
The Ring programming language version 1.5.1 book - Part 21 of 180
The Ring programming language version 1.5.1 book - Part 21 of 180The Ring programming language version 1.5.1 book - Part 21 of 180
The Ring programming language version 1.5.1 book - Part 21 of 180
 
Python3 cheatsheet
Python3 cheatsheetPython3 cheatsheet
Python3 cheatsheet
 
Arrays in php
Arrays in phpArrays in php
Arrays in php
 
iRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat SheetiRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat Sheet
 

Viewers also liked

ReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better TogetherReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better TogetherColin Eberhardt
 
ReactiveCocoa - Functional Reactive Programming concepts in iOS
ReactiveCocoa - Functional Reactive Programming concepts in iOSReactiveCocoa - Functional Reactive Programming concepts in iOS
ReactiveCocoa - Functional Reactive Programming concepts in iOSAndrei Popa
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaYi-Shou Chen
 
Learn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great GoodLearn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great GoodJason Larsen
 
Reactive cocoa made Simple with Swift
Reactive cocoa made Simple with SwiftReactive cocoa made Simple with Swift
Reactive cocoa made Simple with SwiftColin Eberhardt
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程景隆 張
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaFlorent Pillet
 
ReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IIReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IImanuelmaly
 
ReactiveCocoa in Practice
ReactiveCocoa in PracticeReactiveCocoa in Practice
ReactiveCocoa in PracticeOutware Mobile
 
ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016vinciusreal
 
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy
 

Viewers also liked (11)

ReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better TogetherReactiveCocoa and Swift, Better Together
ReactiveCocoa and Swift, Better Together
 
ReactiveCocoa - Functional Reactive Programming concepts in iOS
ReactiveCocoa - Functional Reactive Programming concepts in iOSReactiveCocoa - Functional Reactive Programming concepts in iOS
ReactiveCocoa - Functional Reactive Programming concepts in iOS
 
MV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoaMV(C, mvvm) in iOS and ReactiveCocoa
MV(C, mvvm) in iOS and ReactiveCocoa
 
Learn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great GoodLearn You a ReactiveCocoa for Great Good
Learn You a ReactiveCocoa for Great Good
 
Reactive cocoa made Simple with Swift
Reactive cocoa made Simple with SwiftReactive cocoa made Simple with Swift
Reactive cocoa made Simple with Swift
 
in in der 響應式編程
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
ReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of IIReactiveCocoa Goodness - Part I of II
ReactiveCocoa Goodness - Part I of II
 
ReactiveCocoa in Practice
ReactiveCocoa in PracticeReactiveCocoa in Practice
ReactiveCocoa in Practice
 
ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016
 
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
Stanfy MadCode Meetup #11: Why do you need to switch from Obj-C to Swift, or ...
 

Similar to Stanfy MadCode Meetup #9: Functional Programming 101 with Swift

Swift Rocks #2: Going functional
Swift Rocks #2: Going functionalSwift Rocks #2: Going functional
Swift Rocks #2: Going functionalHackraft
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit partsMaxim Zaks
 
Functional programming in Swift
Functional programming in SwiftFunctional programming in Swift
Functional programming in SwiftJohn Pham
 
Humble introduction to category theory in haskell
Humble introduction to category theory in haskellHumble introduction to category theory in haskell
Humble introduction to category theory in haskellJongsoo Lee
 
Use Applicative where applicable!
Use Applicative where applicable!Use Applicative where applicable!
Use Applicative where applicable!Hermann Hueck
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기진성 오
 
Munihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template HaskellMunihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template HaskellMatthew Pickering
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator PatternEric Torreborre
 
Monadologie
MonadologieMonadologie
Monadologieleague
 
Introduction to Functional Programming with Haskell and JavaScript
Introduction to Functional Programming with Haskell and JavaScriptIntroduction to Functional Programming with Haskell and JavaScript
Introduction to Functional Programming with Haskell and JavaScriptWill Kurt
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collectionsMyeongin Woo
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcionaltdc-globalcode
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2Hang Zhao
 
The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)Eric Torreborre
 
Build a compiler in 2hrs - NCrafts Paris 2015
Build a compiler in 2hrs -  NCrafts Paris 2015Build a compiler in 2hrs -  NCrafts Paris 2015
Build a compiler in 2hrs - NCrafts Paris 2015Phillip Trelford
 

Similar to Stanfy MadCode Meetup #9: Functional Programming 101 with Swift (20)

Swift Rocks #2: Going functional
Swift Rocks #2: Going functionalSwift Rocks #2: Going functional
Swift Rocks #2: Going functional
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit parts
 
Functional programming in Swift
Functional programming in SwiftFunctional programming in Swift
Functional programming in Swift
 
Humble introduction to category theory in haskell
Humble introduction to category theory in haskellHumble introduction to category theory in haskell
Humble introduction to category theory in haskell
 
Monads in Swift
Monads in SwiftMonads in Swift
Monads in Swift
 
Use Applicative where applicable!
Use Applicative where applicable!Use Applicative where applicable!
Use Applicative where applicable!
 
Practical cats
Practical catsPractical cats
Practical cats
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
 
Munihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template HaskellMunihac 2018 - Beautiful Template Haskell
Munihac 2018 - Beautiful Template Haskell
 
The Essence of the Iterator Pattern
The Essence of the Iterator PatternThe Essence of the Iterator Pattern
The Essence of the Iterator Pattern
 
Monadologie
MonadologieMonadologie
Monadologie
 
Swift study: Closure
Swift study: ClosureSwift study: Closure
Swift study: Closure
 
Introduction to Functional Programming with Haskell and JavaScript
Introduction to Functional Programming with Haskell and JavaScriptIntroduction to Functional Programming with Haskell and JavaScript
Introduction to Functional Programming with Haskell and JavaScript
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
 
08. haskell Functions
08. haskell Functions08. haskell Functions
08. haskell Functions
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcional
 
Haskell 101
Haskell 101Haskell 101
Haskell 101
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2
 
The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)The Essence of the Iterator Pattern (pdf)
The Essence of the Iterator Pattern (pdf)
 
Build a compiler in 2hrs - NCrafts Paris 2015
Build a compiler in 2hrs -  NCrafts Paris 2015Build a compiler in 2hrs -  NCrafts Paris 2015
Build a compiler in 2hrs - NCrafts Paris 2015
 

More from Stanfy

Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Stanfy
 
Data processing components architecture in mobile applications
Data processing components architecture in mobile applicationsData processing components architecture in mobile applications
Data processing components architecture in mobile applicationsStanfy
 
Data transfer security for mobile apps
Data transfer security for mobile appsData transfer security for mobile apps
Data transfer security for mobile appsStanfy
 
Building Profanity Filters: clbuttic sh!t
Building Profanity Filters: clbuttic sh!tBuilding Profanity Filters: clbuttic sh!t
Building Profanity Filters: clbuttic sh!tStanfy
 
Optimistic Approach. How to show results instead spinners without breaking yo...
Optimistic Approach. How to show results instead spinners without breaking yo...Optimistic Approach. How to show results instead spinners without breaking yo...
Optimistic Approach. How to show results instead spinners without breaking yo...Stanfy
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsStanfy
 
ComponenKit and React Native
ComponenKit and React NativeComponenKit and React Native
ComponenKit and React NativeStanfy
 
UX Research in mobile
UX Research in mobileUX Research in mobile
UX Research in mobileStanfy
 
Remote user research & usability methods
Remote user research & usability methodsRemote user research & usability methods
Remote user research & usability methodsStanfy
 
Stanfy MadCode Meetup#6: Apple Watch. First Steps.
Stanfy MadCode Meetup#6: Apple Watch. First Steps.Stanfy MadCode Meetup#6: Apple Watch. First Steps.
Stanfy MadCode Meetup#6: Apple Watch. First Steps.Stanfy
 
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...Stanfy
 
Stanfy's highlights of 2013
Stanfy's highlights of 2013Stanfy's highlights of 2013
Stanfy's highlights of 2013Stanfy
 
10 things to consider when choosing a mobile platform (iOS or Android)
10 things to consider when choosing a mobile platform (iOS or Android)10 things to consider when choosing a mobile platform (iOS or Android)
10 things to consider when choosing a mobile platform (iOS or Android)Stanfy
 
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...Stanfy
 
Stanfy Publications: Mobile Applications UI/UX Prototyping Process
Stanfy Publications: Mobile Applications UI/UX Prototyping ProcessStanfy Publications: Mobile Applications UI/UX Prototyping Process
Stanfy Publications: Mobile Applications UI/UX Prototyping ProcessStanfy
 
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry Stanfy
 
Android Developer Days: Increasing performance of big arrays processing on An...
Android Developer Days: Increasing performance of big arrays processing on An...Android Developer Days: Increasing performance of big arrays processing on An...
Android Developer Days: Increasing performance of big arrays processing on An...Stanfy
 
Fitness In Mobile: A Case Study.
Fitness In Mobile: A Case Study. Fitness In Mobile: A Case Study.
Fitness In Mobile: A Case Study. Stanfy
 

More from Stanfy (18)

Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...Avoiding damage, shame and regrets data protection for mobile client-server a...
Avoiding damage, shame and regrets data protection for mobile client-server a...
 
Data processing components architecture in mobile applications
Data processing components architecture in mobile applicationsData processing components architecture in mobile applications
Data processing components architecture in mobile applications
 
Data transfer security for mobile apps
Data transfer security for mobile appsData transfer security for mobile apps
Data transfer security for mobile apps
 
Building Profanity Filters: clbuttic sh!t
Building Profanity Filters: clbuttic sh!tBuilding Profanity Filters: clbuttic sh!t
Building Profanity Filters: clbuttic sh!t
 
Optimistic Approach. How to show results instead spinners without breaking yo...
Optimistic Approach. How to show results instead spinners without breaking yo...Optimistic Approach. How to show results instead spinners without breaking yo...
Optimistic Approach. How to show results instead spinners without breaking yo...
 
Users' Data Security in iOS Applications
Users' Data Security in iOS ApplicationsUsers' Data Security in iOS Applications
Users' Data Security in iOS Applications
 
ComponenKit and React Native
ComponenKit and React NativeComponenKit and React Native
ComponenKit and React Native
 
UX Research in mobile
UX Research in mobileUX Research in mobile
UX Research in mobile
 
Remote user research & usability methods
Remote user research & usability methodsRemote user research & usability methods
Remote user research & usability methods
 
Stanfy MadCode Meetup#6: Apple Watch. First Steps.
Stanfy MadCode Meetup#6: Apple Watch. First Steps.Stanfy MadCode Meetup#6: Apple Watch. First Steps.
Stanfy MadCode Meetup#6: Apple Watch. First Steps.
 
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...
Stanfy MadCode Meetup: Анализ и модификация HTTP запросов для тестирования мо...
 
Stanfy's highlights of 2013
Stanfy's highlights of 2013Stanfy's highlights of 2013
Stanfy's highlights of 2013
 
10 things to consider when choosing a mobile platform (iOS or Android)
10 things to consider when choosing a mobile platform (iOS or Android)10 things to consider when choosing a mobile platform (iOS or Android)
10 things to consider when choosing a mobile platform (iOS or Android)
 
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...
Stanfy Publications: How to Conduct Quick Usability Tests for iOS & Android A...
 
Stanfy Publications: Mobile Applications UI/UX Prototyping Process
Stanfy Publications: Mobile Applications UI/UX Prototyping ProcessStanfy Publications: Mobile Applications UI/UX Prototyping Process
Stanfy Publications: Mobile Applications UI/UX Prototyping Process
 
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry
Stanfy Publications: Successful Cases of Mobile Technology in Medical Industry
 
Android Developer Days: Increasing performance of big arrays processing on An...
Android Developer Days: Increasing performance of big arrays processing on An...Android Developer Days: Increasing performance of big arrays processing on An...
Android Developer Days: Increasing performance of big arrays processing on An...
 
Fitness In Mobile: A Case Study.
Fitness In Mobile: A Case Study. Fitness In Mobile: A Case Study.
Fitness In Mobile: A Case Study.
 

Stanfy MadCode Meetup #9: Functional Programming 101 with Swift