FP101x  week 2 Types and Classes
Type Error
ex )
> 1+ False
Error
Type in Haskell
 (expression)e :: (type)t
:type in GHCi
> not False
True
 calculates the type of an expression
> :type not False
not False :: Bool
Basic Types
 Bool
 Char
 String
 Int
 Integer
 Float
List Types
 sequence of value of the same type
 [False, Trye, False] :: [Bool]
 [‘a’, ‘b’, ‘c’ ] :: [Char]
 [[‘a’], [‘b’, ‘c’]] :: [‘Char’]
Tuple Types
 A tuple is a sequence of values of different types
 (False, Ture) :: (Bool, Bool)
 (False, ‘a’, True) :: (Bool, Char, Bool)
Function Types
 not :: Bool > Bool
 isDigit :: Char > Bool — 0, 1
 argument and resist types are unrestricted
Curried Functions
 functions as results
 add’ :: Int > (Int > Int) add’ x y = x+y

more flexible then functions on tuples
 associate to the left mult x y z means (((mult x) y) z)
Polymorphic Fuctions
 a function is called polymorphic (“of many forms”) if its type contains one or more type variables.
 length :: [a] > Int
ex )
> length [False, True]
2
> length [1,2,3,4]
4
 fst :: (a,b) > a
 head :: [a] > a
 take :: Int > [a] > [a]
 zip :: [a] > [b] > [(a,b)]
 id :: a > a
Overloaded Functions
 a polymorphic function is called overloaded of its type contains one or more class contains
 sum :: Num a => [a] > a
ex)
> sum [1,2,3]
6
> sum [‘a’,’b’,’c’]
ERROR
Haskell has a number of type classes
 Num : Numeric types
 Eq : Equality types
 Ord : Ordered types
ex )
 (+) :: Num a => a > a > a
 (==) :: Eq a => a > a > Bool
 (<) :: Ord a => a > a > Bool