SlideShare a Scribd company logo
1 of 48
Download to read offline
Making Swift Even
More Functional
- Swift Summit
Hello, I’m
Veronica Ray!
Swift is great, but it
could be better
Time to make
change is now
–The Recurse Center User’s Manual
“Be rigorous. Understand
how and why your code
works. Understand your
tools. If you're working with
a framework (like Sinatra or
Flask), learning to use it is
just scratching the surface.
Go deeper. Learn how it
works.”
– Functional Programming In Swift
“Functional programmers
emphasize that each
program can be repeatedly
broken into smaller and
smaller pieces; all these
pieces can be assembled
using function application
to define a complete
program.”
– Functional Programming In Swift
“Functional programming…
emphasizes the importance
of programming with values,
free of mutable state or
other side effects.”
CLASS
VS
STRUCT
WHY FUNCTIONAL?
•Helps you write clear
and concise code
•Makes concurrency
easier
•Reduces complexity
vs
SIMPLICITY
COMPARED TO
SCALA
Too many
custom
operators and
not opinionated
enough
FP IN SWIFT
•list
comprehensions
•tail call
optimization
FP IN SWIFT
•list
comprehensions
•tail call
optimization
LIST
COMPREHENSIONS
POWERFUL
PYTHON
PYTHON
BYTE CODE
PYTHON FOR LOOP
BYTE CODE IS
23 LINES!
vs
BYTE CODE IS THE SAME
SPELLING CORRECTOR
CONCISENESS
Reading code
Writing code
ADDING IT TO
SWIFT
FP IN SWIFT
•list
comprehensions
•tail call
optimization
RECURSION
TAIL CALL
TAIL RECURSIVE CALL
STACK TRACE
(fact 3)
(fact-tail 3 1)
(fact-tail 2 3)
(fact-tail 1 6)
(fact-tail 0 6)
6
NOT TAIL RECURSIVE
STACK TRACE
(fact 3)
(* 3 (fact 2))
(* 3 (* 2 (fact 1)))
(* 3 (* 2 (* 1 (fact 0))))
(* 3 (* 2 (* 1 1)))
(* 3 (* 2 1))
TAIL CALL
OPTIMIZATION
NOT
GUANRANTEED
SWIFT CODE
BYTE CODE
jne to the label containing the
conditional jump
BLOW OUT THE STACK
HOPE?
CHANGE YOUR
BYTECODE
CHANGE YOUR LIFE
RECURSION KILLS
RADAR
LEARN MORE
•Functional Swift Conference
•Open Radar
•Dev Forums
•Twitter
•Natasha The Robot’s Blog
WHEN SWIFT GOES
OPEN SOURCE
TIME TO MAKE
CHANGE IS NOW

More Related Content

Viewers also liked

Monitoring Swift - OpenStack Summit May 2015, Vancouver
Monitoring Swift - OpenStack Summit May 2015, VancouverMonitoring Swift - OpenStack Summit May 2015, Vancouver
Monitoring Swift - OpenStack Summit May 2015, VancouverChristian Schwede
 
Elegala.com Media Kit
Elegala.com Media KitElegala.com Media Kit
Elegala.com Media KitJrowett
 
So much has happened since
So much has happened sinceSo much has happened since
So much has happened sinceJamie Snyder
 
Wyatt’s First Book
Wyatt’s  First  BookWyatt’s  First  Book
Wyatt’s First BookLanaBanana
 
Enable Your Customers 24/7
Enable Your Customers 24/7Enable Your Customers 24/7
Enable Your Customers 24/7kjluebke
 
First grade 2011
First grade 2011First grade 2011
First grade 2011LanaBanana
 
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่Krongsap Pengkhwan
 
So Much Has Happened Since
So Much Has Happened SinceSo Much Has Happened Since
So Much Has Happened SinceJamie Snyder
 
Real World Mocking In Swift
Real World Mocking In SwiftReal World Mocking In Swift
Real World Mocking In SwiftVeronica Lillie
 
Un bello ejemplo
Un bello ejemploUn bello ejemplo
Un bello ejemplosusaneriza
 
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่Krongsap Pengkhwan
 
Applicationsofbioinformaticsindrugdiscoveryandprocess
ApplicationsofbioinformaticsindrugdiscoveryandprocessApplicationsofbioinformaticsindrugdiscoveryandprocess
Applicationsofbioinformaticsindrugdiscoveryandprocessjaidev53ster
 
Event Brochure Media Kit2011
Event Brochure Media Kit2011Event Brochure Media Kit2011
Event Brochure Media Kit2011Jrowett
 
You Used To Inject Me In Your Constructor
 You Used To Inject Me In Your Constructor You Used To Inject Me In Your Constructor
You Used To Inject Me In Your ConstructorVeronica Lillie
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftFrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftChris Bailey
 
O'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud EconomicsO'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud EconomicsChris Bailey
 

Viewers also liked (20)

Monitoring Swift - OpenStack Summit May 2015, Vancouver
Monitoring Swift - OpenStack Summit May 2015, VancouverMonitoring Swift - OpenStack Summit May 2015, Vancouver
Monitoring Swift - OpenStack Summit May 2015, Vancouver
 
เคล็ด
เคล็ดเคล็ด
เคล็ด
 
Elegala.com Media Kit
Elegala.com Media KitElegala.com Media Kit
Elegala.com Media Kit
 
So much has happened since
So much has happened sinceSo much has happened since
So much has happened since
 
Wyatt’s First Book
Wyatt’s  First  BookWyatt’s  First  Book
Wyatt’s First Book
 
Enable Your Customers 24/7
Enable Your Customers 24/7Enable Your Customers 24/7
Enable Your Customers 24/7
 
เคล็ด
เคล็ดเคล็ด
เคล็ด
 
Peru 2011
Peru 2011Peru 2011
Peru 2011
 
First grade 2011
First grade 2011First grade 2011
First grade 2011
 
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
 
GreenCampUkraine
GreenCampUkraineGreenCampUkraine
GreenCampUkraine
 
So Much Has Happened Since
So Much Has Happened SinceSo Much Has Happened Since
So Much Has Happened Since
 
Real World Mocking In Swift
Real World Mocking In SwiftReal World Mocking In Swift
Real World Mocking In Swift
 
Un bello ejemplo
Un bello ejemploUn bello ejemplo
Un bello ejemplo
 
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
ร้านอาหารญี่ปุ่น ซูโม่ ซูชิ เชียงใหม่
 
Applicationsofbioinformaticsindrugdiscoveryandprocess
ApplicationsofbioinformaticsindrugdiscoveryandprocessApplicationsofbioinformaticsindrugdiscoveryandprocess
Applicationsofbioinformaticsindrugdiscoveryandprocess
 
Event Brochure Media Kit2011
Event Brochure Media Kit2011Event Brochure Media Kit2011
Event Brochure Media Kit2011
 
You Used To Inject Me In Your Constructor
 You Used To Inject Me In Your Constructor You Used To Inject Me In Your Constructor
You Used To Inject Me In Your Constructor
 
FrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with SwiftFrenchKit: End to End Application Development with Swift
FrenchKit: End to End Application Development with Swift
 
O'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud EconomicsO'Reilly Software Architecture Conf: Cloud Economics
O'Reilly Software Architecture Conf: Cloud Economics
 

Similar to Making Swift Even More Functional

Why functional programming in C# & F#
Why functional programming in C# & F#Why functional programming in C# & F#
Why functional programming in C# & F#Riccardo Terrell
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsTristan Gomez
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshooIdo Shilon
 
RxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programmingRxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programmingMaciej Kołek
 
Unveiling the Power of Java Streams API
Unveiling the Power of Java Streams APIUnveiling the Power of Java Streams API
Unveiling the Power of Java Streams APIUncodemy
 
Fluent Interfaces
Fluent InterfacesFluent Interfaces
Fluent InterfacesIDES Editor
 
Deep dive into Conversational Ai development
Deep dive into Conversational Ai developmentDeep dive into Conversational Ai development
Deep dive into Conversational Ai developmentMarco Parenzan
 
Building CLIs with Ruby
Building CLIs with RubyBuilding CLIs with Ruby
Building CLIs with Rubydrizzlo
 
Demystifying Selenium framework
Demystifying Selenium frameworkDemystifying Selenium framework
Demystifying Selenium frameworkkunalgate125
 
JourneyToLowCode_4of4.pdf
JourneyToLowCode_4of4.pdfJourneyToLowCode_4of4.pdf
JourneyToLowCode_4of4.pdfVaibhavVaidya30
 
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...Tien Nguyen
 
How does intellisense work?
How does intellisense work?How does intellisense work?
How does intellisense work?Adam Friedman
 
Building software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinBuilding software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinRikard Thulin
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to ClojureRenzo Borgatti
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentPersistent Systems Ltd.
 
Functional programming is the most extreme programming
Functional programming is the most extreme programmingFunctional programming is the most extreme programming
Functional programming is the most extreme programmingsamthemonad
 

Similar to Making Swift Even More Functional (20)

Why functional programming in C# & F#
Why functional programming in C# & F#Why functional programming in C# & F#
Why functional programming in C# & F#
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshoo
 
RxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programmingRxSwift for Beginners - how to avoid a headache of reactive programming
RxSwift for Beginners - how to avoid a headache of reactive programming
 
Unveiling the Power of Java Streams API
Unveiling the Power of Java Streams APIUnveiling the Power of Java Streams API
Unveiling the Power of Java Streams API
 
Fluent Interfaces
Fluent InterfacesFluent Interfaces
Fluent Interfaces
 
Deep dive into Conversational Ai development
Deep dive into Conversational Ai developmentDeep dive into Conversational Ai development
Deep dive into Conversational Ai development
 
E3 chap-08
E3 chap-08E3 chap-08
E3 chap-08
 
Building CLIs with Ruby
Building CLIs with RubyBuilding CLIs with Ruby
Building CLIs with Ruby
 
Demystifying Selenium framework
Demystifying Selenium frameworkDemystifying Selenium framework
Demystifying Selenium framework
 
e3-chap-08.ppt
e3-chap-08.ppte3-chap-08.ppt
e3-chap-08.ppt
 
JourneyToLowCode_4of4.pdf
JourneyToLowCode_4of4.pdfJourneyToLowCode_4of4.pdf
JourneyToLowCode_4of4.pdf
 
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...
Deciding Between NestJS and Laravel: Syntax, Authentication, and Real-time Ca...
 
How does intellisense work?
How does intellisense work?How does intellisense work?
How does intellisense work?
 
Building software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard ThulinBuilding software using Rich Clients Platforms Rikard Thulin
Building software using Rich Clients Platforms Rikard Thulin
 
Introduction to Clojure
Introduction to ClojureIntroduction to Clojure
Introduction to Clojure
 
Life & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@PersistentLife & Work of Butler Lampson | Turing100@Persistent
Life & Work of Butler Lampson | Turing100@Persistent
 
J threads-pdf
J threads-pdfJ threads-pdf
J threads-pdf
 
Functional programming is the most extreme programming
Functional programming is the most extreme programmingFunctional programming is the most extreme programming
Functional programming is the most extreme programming
 
E3 chap-08
E3 chap-08E3 chap-08
E3 chap-08
 

Recently uploaded

main PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidmain PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidNikhilNagaraju
 
Current Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLCurrent Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLDeelipZope
 
GDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSCAESB
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Dr.Costas Sachpazis
 
chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learningmisbanausheenparvam
 
Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.eptoze12
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxPoojaBan
 
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2RajaP95
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxwendy cai
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxJoão Esperancinha
 
Introduction to Microprocesso programming and interfacing.pptx
Introduction to Microprocesso programming and interfacing.pptxIntroduction to Microprocesso programming and interfacing.pptx
Introduction to Microprocesso programming and interfacing.pptxvipinkmenon1
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024Mark Billinghurst
 

Recently uploaded (20)

main PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfidmain PPT.pptx of girls hostel security using rfid
main PPT.pptx of girls hostel security using rfid
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Current Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCLCurrent Transformer Drawing and GTP for MSETCL
Current Transformer Drawing and GTP for MSETCL
 
GDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentationGDSC ASEB Gen AI study jams presentation
GDSC ASEB Gen AI study jams presentation
 
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
Sheet Pile Wall Design and Construction: A Practical Guide for Civil Engineer...
 
chaitra-1.pptx fake news detection using machine learning
chaitra-1.pptx  fake news detection using machine learningchaitra-1.pptx  fake news detection using machine learning
chaitra-1.pptx fake news detection using machine learning
 
Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.Oxy acetylene welding presentation note.
Oxy acetylene welding presentation note.
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptx
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2HARMONY IN THE HUMAN BEING - Unit-II UHV-2
HARMONY IN THE HUMAN BEING - Unit-II UHV-2
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptx
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
 
Introduction to Microprocesso programming and interfacing.pptx
Introduction to Microprocesso programming and interfacing.pptxIntroduction to Microprocesso programming and interfacing.pptx
Introduction to Microprocesso programming and interfacing.pptx
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Isha Call 7001035870 Meet With Nagpur Escorts
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024IVE Industry Focused Event - Defence Sector 2024
IVE Industry Focused Event - Defence Sector 2024
 

Making Swift Even More Functional