SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
Haskell
 being lazy with class


                         Tiago Babo
                         PPRO@FEUP 2012
History

Lisp/Scheme   ML/OCaml    Miranda     Haskell 98
    1959        1979       1985         2003
 functional     static      lazy
  language     typing    evaluation
History
There are two main Haskell implementations:

▹ GHC. Probably the most popular, compiles to native code on a
number of different architectures.

▹ Hugs. It’s a bytecode interpreter and the most portable and
lightweight of the Haskell implementations.
Related languages
There are some languages inspired by Haskell:

▹ Different type system: Epigram, Agda.

▹ JVM-based: Frege, Jaskell.

▹ Other related languages: Curry.

▹ Testbed for many new ideas: Parallel Haskell, Eager Haskell,
Generic Haskell, O’Haskell, Hume, Scotch, Disciple...
haskell
Haskell is a pure functional language. It means that:

▹ Variables never change after definition.

▹ Functions don’t have side effects.

▹ Functions always return the same output given the same input.
haskell
What haskell offer to the programmer?

▹ Purity. It doesn’t allow any side-effects.

▹ Laziness (non-strict). Nothing is evaluated until it has to be evaluated.

▹ Strong static typing. The compiler automatically infers a precise type for
all values and it permits no implicit type conversions.

▹ Elegance. Stuff just work like you’d expect it to.
haskell and bugs
Haskell programs have fewer bugs because Haskell is:

▹ Pure. There are no side effects.

▹ Strongly typed. There can be no dubious use of types.

▹ Concise. Programs are shorter which make it easier to “take it all” at once.
haskell and bugs
Haskell programs have fewer bugs because Haskell is:

▹ High Level. Haskell programs most often reads out almost exactly like the
algorithm description.

▹ Memory Managed. There’s no worrying about dangling pointers, the
Garbage Collector takes care of all that.

▹ Modular. Haskell offers stronger and more “glue” to compose your
program from already developed modules.
haskell cons
Haskell has some disadvantages:

▹ Hard to learn and master. It’s even harder without a proper computer
science background.

▹ You can’t write haskell-like code in other programming languages.

▹ Lacks libraries and support from who mantain and improve them.
code examples
fibonacci
1 1 2 3 5 8 13 21 34 ..
Java
List <int> fib(int i) {
 List <int> seq = new ArrayList(n);
 seq[0] = 1;
 seq[1] = 1;
 for(int i = 2; i < n; i++) {
  seq[i] = seq[i-2] + seq[i-1];
 }
 return seq;
}
Haskell


fib = 1:1:zipWith (+) fib (tail fib)
Java VS haskell
fib = 1:1:zipWith (+) fib (tail fib)




List <int> seq = new ArrayList(n);
seq[0] = 1;
seq[1] = 1;
for(int i = 2; i < n; i++) {
  seq[i] = seq[i-2] + seq[i-1];
}
Java VS haskell
fib = 1:1:zipWith (+) fib (tail fib)




List <int> seq = new ArrayList(n);
seq[0] = 1;
seq[1] = 1;
for(int i = 2; i < n; i++) {
  seq[i] = seq[i-2] + seq[i-1];
}
Java VS haskell
fib = 1:1:zipWith (+) fib (tail fib)




List <int> seq = new ArrayList(n);
seq[0] = 1;
seq[1] = 1;
for(int i = 2; i < n; i++) {
  seq[i] = seq[i-2] + seq[i-1];
}
Java VS haskell
fib = 1:1:zipWith (+) fib (tail fib)




List <int> seq = new ArrayList(n);
seq[0] = 1;
seq[1] = 1;
for(int i = 2; i < n; i++) {
  seq[i] = seq[i-2] + seq[i-1];
}
How it works?
fib = 1:1:zipWith (+) fib (tail fib)



take 2 fib -> ?                             lazy evaluation
fib                          = 1 : 1 : ..
tail fib                     = 1 : ..
zipWith (+) fib (tail fib)   = ..

take 2 fib -> [1,1]
How it works?
fib = 1:1:zipWith (+) fib (tail fib)



take 3 fib -> ?

fib                          = 1 : 1 : 2 : ..
tail fib                     = 1 : 2 : ..
zipWith (+) fib (tail fib)   = 2 : ..

take 3 fib -> [1,1,2]
How it works?
fib = 1:1:zipWith (+) fib (tail fib)

take 10 fib -> ?

fib                          = 1 : 1 : 2 : 3 : ..
tail fib                     = 1 : 2 : 3 : ..
zipWith (+) fib (tail fib)   = 2 : 3 : ..

...

fib                          = 1 : 1 : 2 : 3 : 5 ..
tail fib                     = 1 : 2 : 3 : 5 : ..
zipWith (+) fib (tail fib)   = 2 : 3 : 5 : ..

take 10 fib -> [1,1,2,3,5,8,13,21,34,55]
and how about the types?


fib = 1:1:zipWith (+) fib (tail fib)
and how about the types?
           int

fib = 1:1:zipWith (+) fib (tail fib)

int
and how about the types?
      List<int>   int

fib = 1:1:zipWith (+) fib (tail fib)

int
and how about the types?
                                    List<int>
      List<int>   int

fib = 1:1:zipWith (+) fib (tail fib)

int                     List<int>
and how about the types?
                                List<int>   List<int>
      List<int>   int

fib = 1:1:zipWith (+) fib (tail fib)

int                     List<int>
Quicksort
[3,2,1,4] -> [1,2,3,4]
C
// To sort array a[] of size n: qsort(a,0,n-1)
void qsort(int a[], int lo, int hi)
{
  int h, l, p, t;
  if (lo < hi) {
    l = lo;
    h = hi;
    p = a[hi];
    do {
      while ((l < h) && (a[l] <= p))
          l = l+1;
      while ((h > l) && (a[h] >= p))
          h = h-1;
      if (l < h) {
          t = a[l];
          a[l] = a[h];
          a[h] = t;
      }
    } while (l < h);
    a[hi] = a[l];
    a[l] = p;
    qsort( a, lo, l-1 );
    qsort( a, l+1, hi );
  }
}
Haskell
qsort(p:xs) = (qsort lesser) ++ [p] ++
              (qsort greater)
 where
     lesser = filter (< p) xs
     greater = filter (>= p) xs
Haskell

qsort(p:xs) = qsort [x | x<-xs, x<p]
              ++ [p]
              ++ qsort [x | x<-xs, x>=p]
Factorial
5! = 1x2x3x4x5
Haskell
pattern
matching fac 0 = 1
         fac n | n > 0 = n * fac (n-1)

       fac n = product [1..n]

       fac n = foldr1 (*) [1..n]

       fac n = if n == 1 then 1 else n * fac (n-1)
Haskell
fac n = case n of
 0 -> 1
 n -> n * fac (n-1)

facs = scanl (*) 1 [1..]

fac n = facs !! n
haskell in industry
Haskell is used in many areas:

▹ Aerospace, defense, finance, web startups, and hardware design
firms.
haskell in industry

     automate processing       procedural city generation
of internet abuse complaints     and simulation market




     programmatically          analysis of cryptographic
manipulating a PHP code base           protocols
haskell in industry

measure the counterparty risk on    implement mathematical
 portfolios of financial derivates   models and other complex




   job scheduling and brand          handwriting recognition
           matching                         system
Haskell
                         being lazy with class

Links:
http://haskell.org/ - Haskell official homepage
http://youtu.be/cXY4fSA7DnM - Stanford Tutorial
http://haifux.org/lectures/173/ - An overview of Haskell (Haggai Eran)
http://en.wikipedia.org/wiki/Haskell_(programming_language) - Haskell History

                                                         Tiago Babo
                                                         PPRO@FEUP 2012

Contenu connexe

Tendances

Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойSigma Software
 
Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lispkyleburton
 
Python Performance 101
Python Performance 101Python Performance 101
Python Performance 101Ankur Gupta
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In JavaAndrei Solntsev
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsQuark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsJohn De Goes
 
Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJosé Paumard
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesTomer Gabel
 
There's a Prolog in your Scala!
There's a Prolog in your Scala!There's a Prolog in your Scala!
There's a Prolog in your Scala!George Leontiev
 
Beginning Haskell, Dive In, Its Not That Scary!
Beginning Haskell, Dive In, Its Not That Scary!Beginning Haskell, Dive In, Its Not That Scary!
Beginning Haskell, Dive In, Its Not That Scary!priort
 
Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) wahab khan
 
python beginner talk slide
python beginner talk slidepython beginner talk slide
python beginner talk slidejonycse
 
Functional Programming and Ruby
Functional Programming and RubyFunctional Programming and Ruby
Functional Programming and RubyPat Shaughnessy
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonMax Klymyshyn
 
Real World Haskell: Lecture 5
Real World Haskell: Lecture 5Real World Haskell: Lecture 5
Real World Haskell: Lecture 5Bryan O'Sullivan
 
Practically Functional
Practically FunctionalPractically Functional
Practically Functionaldjspiewak
 

Tendances (20)

Столпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай МозговойСтолпы функционального программирования для адептов ООП, Николай Мозговой
Столпы функционального программирования для адептов ООП, Николай Мозговой
 
Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lisp
 
Python Performance 101
Python Performance 101Python Performance 101
Python Performance 101
 
Functional Programming In Java
Functional Programming In JavaFunctional Programming In Java
Functional Programming In Java
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & AnalyticsQuark: A Purely-Functional Scala DSL for Data Processing & Analytics
Quark: A Purely-Functional Scala DSL for Data Processing & Analytics
 
Functional programming in java
Functional programming in javaFunctional programming in java
Functional programming in java
 
Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava Comparison
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 
There's a Prolog in your Scala!
There's a Prolog in your Scala!There's a Prolog in your Scala!
There's a Prolog in your Scala!
 
Beginning Haskell, Dive In, Its Not That Scary!
Beginning Haskell, Dive In, Its Not That Scary!Beginning Haskell, Dive In, Its Not That Scary!
Beginning Haskell, Dive In, Its Not That Scary!
 
Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence) Advance LISP (Artificial Intelligence)
Advance LISP (Artificial Intelligence)
 
python beginner talk slide
python beginner talk slidepython beginner talk slide
python beginner talk slide
 
Functional Programming and Ruby
Functional Programming and RubyFunctional Programming and Ruby
Functional Programming and Ruby
 
Odessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and PythonOdessapy2013 - Graph databases and Python
Odessapy2013 - Graph databases and Python
 
Real World Haskell: Lecture 5
Real World Haskell: Lecture 5Real World Haskell: Lecture 5
Real World Haskell: Lecture 5
 
Java 8 Stream API (Valdas Zigas)
Java 8 Stream API (Valdas Zigas)Java 8 Stream API (Valdas Zigas)
Java 8 Stream API (Valdas Zigas)
 
Practically Functional
Practically FunctionalPractically Functional
Practically Functional
 
Python
PythonPython
Python
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 

Similaire à Haskell - Being lazy with class

Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Mattersromanandreg
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a MomentSergio Gil
 
Pure Laziness: An Exploration of Haskell
Pure Laziness: An Exploration of HaskellPure Laziness: An Exploration of Haskell
Pure Laziness: An Exploration of HaskellMitchell Vitez
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?osfameron
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional Programmingchriseidhof
 
Functional Programming in F#
Functional Programming in F#Functional Programming in F#
Functional Programming in F#Dmitri Nesteruk
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecLoïc Descotte
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming iiPrashant Kalkar
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Bryan O'Sullivan
 
FP in scalaで鍛える関数型脳
FP in scalaで鍛える関数型脳FP in scalaで鍛える関数型脳
FP in scalaで鍛える関数型脳Yuri Inoue
 
2014 holden - databricks umd scala crash course
2014   holden - databricks umd scala crash course2014   holden - databricks umd scala crash course
2014 holden - databricks umd scala crash courseHolden Karau
 
Use PEG to Write a Programming Language Parser
Use PEG to Write a Programming Language ParserUse PEG to Write a Programming Language Parser
Use PEG to Write a Programming Language ParserYodalee
 
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
 
Introduction to Functional Languages
Introduction to Functional LanguagesIntroduction to Functional Languages
Introduction to Functional Languagessuthi
 

Similaire à Haskell - Being lazy with class (20)

Why Haskell Matters
Why Haskell MattersWhy Haskell Matters
Why Haskell Matters
 
Five Languages in a Moment
Five Languages in a MomentFive Languages in a Moment
Five Languages in a Moment
 
Haskell
HaskellHaskell
Haskell
 
Pure Laziness: An Exploration of Haskell
Pure Laziness: An Exploration of HaskellPure Laziness: An Exploration of Haskell
Pure Laziness: An Exploration of Haskell
 
Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?Is Haskell an acceptable Perl?
Is Haskell an acceptable Perl?
 
Functional Programming
Functional ProgrammingFunctional Programming
Functional Programming
 
Functional Programming in F#
Functional Programming in F#Functional Programming in F#
Functional Programming in F#
 
Scala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar ProkopecScala presentation by Aleksandar Prokopec
Scala presentation by Aleksandar Prokopec
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Functional programming ii
Functional programming iiFunctional programming ii
Functional programming ii
 
Real World Haskell: Lecture 1
Real World Haskell: Lecture 1Real World Haskell: Lecture 1
Real World Haskell: Lecture 1
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
FP in scalaで鍛える関数型脳
FP in scalaで鍛える関数型脳FP in scalaで鍛える関数型脳
FP in scalaで鍛える関数型脳
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
2014 holden - databricks umd scala crash course
2014   holden - databricks umd scala crash course2014   holden - databricks umd scala crash course
2014 holden - databricks umd scala crash course
 
Haskell
HaskellHaskell
Haskell
 
Use PEG to Write a Programming Language Parser
Use PEG to Write a Programming Language ParserUse PEG to Write a Programming Language Parser
Use PEG to Write a Programming Language Parser
 
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
 
Music as data
Music as dataMusic as data
Music as data
 
Introduction to Functional Languages
Introduction to Functional LanguagesIntroduction to Functional Languages
Introduction to Functional Languages
 

Dernier

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 

Dernier (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 

Haskell - Being lazy with class

  • 1. Haskell being lazy with class Tiago Babo PPRO@FEUP 2012
  • 2. History Lisp/Scheme ML/OCaml Miranda Haskell 98 1959 1979 1985 2003 functional static lazy language typing evaluation
  • 3. History There are two main Haskell implementations: ▹ GHC. Probably the most popular, compiles to native code on a number of different architectures. ▹ Hugs. It’s a bytecode interpreter and the most portable and lightweight of the Haskell implementations.
  • 4. Related languages There are some languages inspired by Haskell: ▹ Different type system: Epigram, Agda. ▹ JVM-based: Frege, Jaskell. ▹ Other related languages: Curry. ▹ Testbed for many new ideas: Parallel Haskell, Eager Haskell, Generic Haskell, O’Haskell, Hume, Scotch, Disciple...
  • 5. haskell Haskell is a pure functional language. It means that: ▹ Variables never change after definition. ▹ Functions don’t have side effects. ▹ Functions always return the same output given the same input.
  • 6. haskell What haskell offer to the programmer? ▹ Purity. It doesn’t allow any side-effects. ▹ Laziness (non-strict). Nothing is evaluated until it has to be evaluated. ▹ Strong static typing. The compiler automatically infers a precise type for all values and it permits no implicit type conversions. ▹ Elegance. Stuff just work like you’d expect it to.
  • 7. haskell and bugs Haskell programs have fewer bugs because Haskell is: ▹ Pure. There are no side effects. ▹ Strongly typed. There can be no dubious use of types. ▹ Concise. Programs are shorter which make it easier to “take it all” at once.
  • 8. haskell and bugs Haskell programs have fewer bugs because Haskell is: ▹ High Level. Haskell programs most often reads out almost exactly like the algorithm description. ▹ Memory Managed. There’s no worrying about dangling pointers, the Garbage Collector takes care of all that. ▹ Modular. Haskell offers stronger and more “glue” to compose your program from already developed modules.
  • 9. haskell cons Haskell has some disadvantages: ▹ Hard to learn and master. It’s even harder without a proper computer science background. ▹ You can’t write haskell-like code in other programming languages. ▹ Lacks libraries and support from who mantain and improve them.
  • 11. fibonacci 1 1 2 3 5 8 13 21 34 ..
  • 12. Java List <int> fib(int i) { List <int> seq = new ArrayList(n); seq[0] = 1; seq[1] = 1; for(int i = 2; i < n; i++) { seq[i] = seq[i-2] + seq[i-1]; } return seq; }
  • 13. Haskell fib = 1:1:zipWith (+) fib (tail fib)
  • 14. Java VS haskell fib = 1:1:zipWith (+) fib (tail fib) List <int> seq = new ArrayList(n); seq[0] = 1; seq[1] = 1; for(int i = 2; i < n; i++) { seq[i] = seq[i-2] + seq[i-1]; }
  • 15. Java VS haskell fib = 1:1:zipWith (+) fib (tail fib) List <int> seq = new ArrayList(n); seq[0] = 1; seq[1] = 1; for(int i = 2; i < n; i++) { seq[i] = seq[i-2] + seq[i-1]; }
  • 16. Java VS haskell fib = 1:1:zipWith (+) fib (tail fib) List <int> seq = new ArrayList(n); seq[0] = 1; seq[1] = 1; for(int i = 2; i < n; i++) { seq[i] = seq[i-2] + seq[i-1]; }
  • 17. Java VS haskell fib = 1:1:zipWith (+) fib (tail fib) List <int> seq = new ArrayList(n); seq[0] = 1; seq[1] = 1; for(int i = 2; i < n; i++) { seq[i] = seq[i-2] + seq[i-1]; }
  • 18. How it works? fib = 1:1:zipWith (+) fib (tail fib) take 2 fib -> ? lazy evaluation fib = 1 : 1 : .. tail fib = 1 : .. zipWith (+) fib (tail fib) = .. take 2 fib -> [1,1]
  • 19. How it works? fib = 1:1:zipWith (+) fib (tail fib) take 3 fib -> ? fib = 1 : 1 : 2 : .. tail fib = 1 : 2 : .. zipWith (+) fib (tail fib) = 2 : .. take 3 fib -> [1,1,2]
  • 20. How it works? fib = 1:1:zipWith (+) fib (tail fib) take 10 fib -> ? fib = 1 : 1 : 2 : 3 : .. tail fib = 1 : 2 : 3 : .. zipWith (+) fib (tail fib) = 2 : 3 : .. ... fib = 1 : 1 : 2 : 3 : 5 .. tail fib = 1 : 2 : 3 : 5 : .. zipWith (+) fib (tail fib) = 2 : 3 : 5 : .. take 10 fib -> [1,1,2,3,5,8,13,21,34,55]
  • 21. and how about the types? fib = 1:1:zipWith (+) fib (tail fib)
  • 22. and how about the types? int fib = 1:1:zipWith (+) fib (tail fib) int
  • 23. and how about the types? List<int> int fib = 1:1:zipWith (+) fib (tail fib) int
  • 24. and how about the types? List<int> List<int> int fib = 1:1:zipWith (+) fib (tail fib) int List<int>
  • 25. and how about the types? List<int> List<int> List<int> int fib = 1:1:zipWith (+) fib (tail fib) int List<int>
  • 27. C // To sort array a[] of size n: qsort(a,0,n-1) void qsort(int a[], int lo, int hi) { int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do { while ((l < h) && (a[l] <= p)) l = l+1; while ((h > l) && (a[h] >= p)) h = h-1; if (l < h) { t = a[l]; a[l] = a[h]; a[h] = t; } } while (l < h); a[hi] = a[l]; a[l] = p; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } }
  • 28. Haskell qsort(p:xs) = (qsort lesser) ++ [p] ++ (qsort greater) where lesser = filter (< p) xs greater = filter (>= p) xs
  • 29. Haskell qsort(p:xs) = qsort [x | x<-xs, x<p] ++ [p] ++ qsort [x | x<-xs, x>=p]
  • 31. Haskell pattern matching fac 0 = 1 fac n | n > 0 = n * fac (n-1) fac n = product [1..n] fac n = foldr1 (*) [1..n] fac n = if n == 1 then 1 else n * fac (n-1)
  • 32. Haskell fac n = case n of 0 -> 1 n -> n * fac (n-1) facs = scanl (*) 1 [1..] fac n = facs !! n
  • 33. haskell in industry Haskell is used in many areas: ▹ Aerospace, defense, finance, web startups, and hardware design firms.
  • 34. haskell in industry automate processing procedural city generation of internet abuse complaints and simulation market programmatically analysis of cryptographic manipulating a PHP code base protocols
  • 35. haskell in industry measure the counterparty risk on implement mathematical portfolios of financial derivates models and other complex job scheduling and brand handwriting recognition matching system
  • 36. Haskell being lazy with class Links: http://haskell.org/ - Haskell official homepage http://youtu.be/cXY4fSA7DnM - Stanford Tutorial http://haifux.org/lectures/173/ - An overview of Haskell (Haggai Eran) http://en.wikipedia.org/wiki/Haskell_(programming_language) - Haskell History Tiago Babo PPRO@FEUP 2012