 # FP101x - week 2 Types and Classes

### Type Error

ex )

``````> 1+ False
Error
``````

• (expression)e :: (type)t

### :type in GHCi

``````> not False
True
``````
• calculates the type of an expression
``````> :type not False
not False :: Bool
``````

• 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

• 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