# FP101x - week 2 Types and Classes

# Type Error

> 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