CS302: Paradigms of Programming Functional Programming with Haskell (Cont.)
Manas Thakur
Spring 2020
CS302: Paradigms of Programming Functional Programming with Haskell - - PowerPoint PPT Presentation
CS302: Paradigms of Programming Functional Programming with Haskell (Cont.) Manas Thakur Spring 2020 The best way to begin (and even finish!) 2 Types types types What is a type? What is it useful for? What is type checking? Di
Spring 2020
2
3
4
data Bool = False | True
Data declaration Data constructors
5
data Shape = Circle Float Float Float | Rectangle Float Float Float Float area :: Shape -> Float area (Circle _ _ r) = pi * r * r area (Rectangle ...
Notice pattern matching! Named constructors!
6
data Maybe a = Nothing | Just a
Type parameter
head :: [a] -> a head [] = error “Empty list” head (x:_) = x safeHead :: [a] -> Maybe a safeHead [] = Nothing safeHead (x:_) = Just x safediv :: Int -> Int -> Maybe Int safediv _ 0 = Nothing safediv m n = Just (m `div` n) Can’t return this!
7
> import Data.List > :t sort > sort :: Ord a => [a] -> [a]
(+) :: Int -> Int -> Int (+) :: Float -> Float -> Float (+) :: a -> a -> a
Too specific Too general
8
> :t (+) > + :: Num a => a -> a -> a class (Eq a, Show a) => Num a where (+),(-),(*) :: a -> a -> a negate :: a -> a abs, signum :: a -> a fromInteger :: Integer -> a
9
data Nat = Zero | Succ Nat
nat2int :: Nat -> Int nat2int Zero = 0 nat2int (Succ n) = 1 + nat2int n add :: Nat -> Nat -> Nat add m n = int2nat (nat2int m + nat2int n) CQ
10
11
Properties