SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Tema 3: Tipos y clases
          Informática (2010–11)


          José A. Alonso Jiménez

        Grupo de Lógica Computacional
Departamento de Ciencias de la Computación e I.A.
             Universidad de Sevilla
IM Tema 3: Tipos y clases




Tema 3: Tipos y clases
 1. Conceptos básicos sobre tipos
 2. Tipos básicos
 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones
 4. Parcialización
 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados
 6. Clases básicas

                                    2 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    3 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




¿Qué es un tipo?
         Un tipo es una colección de valores relacionados.
         Un ejemplo de tipos es el de los valores booleanos: Bool
         El tipo Bool tiene dos valores True (verdadero) y False (falso).
         v :: T representa que v es un valor del tipo T y se dice que “v
         tiene tipo T”.
         Cálculo de tipo con :type
          Prelude> :type True
          True :: Bool
          Prelude> :type False
          False :: Bool
         El tipo Bool -> Bool está formado por todas las funciones cuyo
         argumento y valor son booleanos.
         Ejemplo de tipo Bool -> Bool
          Prelude> :type not
          not :: Bool -> Bool                                               4 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Inferencia de tipos
         Regla de inferencia de tipos
                f :: A → B e :: A
                      f e :: B
         Tipos de expresiones:
         Prelude> :type not True
         not True :: Bool
         Prelude> :type not False
         not False :: Bool
         Prelude> :type not (not False)
         not (not False) :: Bool
         Error de tipo:
         Prelude> :type not 3
         Error: No instance for (Num Bool)
         Prelude> :type 1 + False
         Error: No instance for (Num Bool)   5 / 38
IM Tema 3: Tipos y clases
  Conceptos básicos sobre tipos




Ventajas de los tipos
         Los lenguajes en los que la inferencia de tipo precede a la
         evaluación se denominan de tipos seguros.
         Haskell es un lenguaje de tipos seguros.
         En los lenguajes de tipos seguros no ocurren errores de tipos
         durante la evaluación.
         La inferencia de tipos no elimina todos los errores durante la
         evaluación. Por ejemplo,
          Prelude> :type 1 `div` 0
          1 `div` 0 :: (Integral t) => t
          Prelude> 1 `div` 0
          *** Exception: divide by zero



                                                                          6 / 38
IM Tema 3: Tipos y clases
  Tipos básicos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    7 / 38
IM Tema 3: Tipos y clases
  Tipos básicos




Tipos básicos
         Bool (Valores lógicos):
                  Sus valores son True y False.
         Char (Caracteres):
                  Ejemplos: ’a’, ’B’, ’3’, ’+’
         String (Cadena de caracteres):
                  Ejemplos: "abc", "1 + 2 = 3"
         Int (Enteros de precisión fija):
                  Enteros entre −231 y 231 − 1.
                  Ejemplos: 123, -12
         Integer (Enteros de precisión arbitraria):
                  Ejemplos: 1267650600228229401496703205376.
         Float (Reales de precisión arbitraria):
                  Ejemplos: 1.2, -23.45, 45e-7
         Double (Reales de precisión doble):
                  Ejemplos: 1.2, -23.45, 45e-7
                                                               8 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    9 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos listas



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    10 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos listas



Tipos listas
         Una lista es una sucesión de elementos del mismo tipo.
         [T] es el tipo de las listas de elementos de tipo T.
         Ejemplos de listas:
          [False, True] :: [Bool]
          ['a','b','d'] :: [Char]
          ["uno","tres"] :: [String]
         Longitudes:
                    La longitud de una lista es el número de elementos.
                    La lista de longitud 0, [], es la lista vacía.
                    Las listas de longitud 1 se llaman listas unitarias.
         Comentarios:
                    El tipo de una lista no informa sobre su longitud:
                     ['a','b'] :: [Char]
                     ['a','b','c'] :: [Char]
                    El tipo de los elementos de una lista puede ser cualquiera:
                     [['a','b'],['c']] :: [[Char]]                                11 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos tuplas



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    12 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos tuplas



Tipos tuplas
         Una tupla es una sucesión de elementos.
         (T1 , T2 , . . . , Tn ) es el tipo de las n–tuplas cuya componente
         i–ésima es de tipo Ti .
         Ejemplos de tuplas:
          (False,True)                 :: (Bool,Bool)
          (False,'a',True) :: (Bool,Char,Bool)
         Aridades:
                    La aridad de una tupla es el número de componentes.
                    La tupla de aridad 0, (), es la tupla vacía.
                    No están permitidas las tuplas de longitud 1.
         Comentarios:
                    El tipo de una tupla informa sobre su longitud:
                     ('a','b')     :: (Char,Char)
                     ('a','b','c') :: (Char,Char,Char)
                    El tipo de los elementos de una tupla puede ser cualquiera:
                     (('a','b'),['c','d']) :: ((Char,Char),[Char])                13 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos
       Tipos listas
       Tipos tuplas
       Tipos funciones

 4. Parcialización

 5. Polimorfismo y sobrecarga

                                    14 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Tipos funciones
         Una función es una aplicación de valores de un tipo en valores de
         otro tipo.
         T1 → T2 es el tipo de las funciones que aplica valores del tipo T1
         en valores del tipo T2 .
         Ejemplos de funciones:
          not      :: Bool -> Bool
          isDigit :: Char -> Bool




                                                                              15 / 38
IM Tema 3: Tipos y clases
  Tipos compuestos
     Tipos funciones



Funciones con múltiples argumentos o valores
         Ejemplo de función con múltiples argumentos:
         suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5.

         suma :: (Int,Int) -> Int
         suma (x,y) = x+y
         Ejemplo de función con múltiples valores:
         deCeroA 5 es la lista de los números desde 0 hasta n. Por
         ejemplo, deCeroA n es [0,1,2,3,4,5].

         deCeroA :: Int -> [Int]
         deCeroA n = [0..n]
         Notas:
            1. En las definiciones se ha escrito la signatura de las funciones.
            2. No es obligatorio escribir la signatura de las funciones.
            3. Es conveniente escribir las signatura.
                                                                                 16 / 38
IM Tema 3: Tipos y clases
  Parcialización




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    17 / 38
IM Tema 3: Tipos y clases
  Parcialización




Parcialización
         Mecanismo de parcialización (currying en inglés): Las funciones
         de más de un argumento pueden interpretarse como funciones
         que toman un argumento y devuelven otra función con un
         argumento menos.
         Ejemplo de parcialización:

         suma' :: Int -> (Int -> Int)
         suma' x y = x+y
         suma’ toma un entero x y devuelve la función suma’ x que
         toma un entero y y devuelve la suma de x e y. Por ejemplo,
          *Main> :type suma' 2
          suma' 2 :: Int -> Int
          *Main> :type suma' 2 3
          suma' 2 3 :: Int
                                                                           18 / 38
IM Tema 3: Tipos y clases
  Parcialización




Parcialización con tres argumentos
         Ejemplo de parcialización con tres argumentos:

         mult :: Int -> (Int -> (Int -> Int))
         mult x y z = x*y*z
         mult toma un entero x y devuelve la función mult x que toma
         un entero y y devuelve la función mult x y que toma un entero
         z y devuelve x*y*z. Por ejemplo,
          *Main> :type mult 2
          mult 2 :: Int -> (Int -> Int)
          *Main> :type mult 2 3
          mult 2 3 :: Int -> Int
          *Main> :type mult 2 3 7
          mult 2 3 7 :: Int
                                                                         19 / 38
IM Tema 3: Tipos y clases
  Parcialización




Aplicación parcial
         Las funciones que toman sus argumentos de uno en uno se
         llaman currificadas (curried en inglés).
         Las funciones suma’ y mult son currificadas.
         Las funciones currificadas pueden aplicarse parcialmente. Por
         ejemplo,
          *Main> (suma' 2) 3
          5
         Pueden definirse funciones usando aplicaciones parciales. Por
         ejemplo,

         suc :: Int -> Int
         suc = suma' 1
         suc x es el sucesor de x. Por ejemplo, suc 2 es 3.
                                                                        20 / 38
IM Tema 3: Tipos y clases
  Parcialización




Convenios para reducir paréntesis
         Convenio 1: Las flechas en los tipos se asocia por la derecha. Por
         ejemplo,
                Int -> Int -> Int -> Int
         representa a
                Int -> (Int -> (Int -> Int))
         Convenio 2: Las aplicaciones de funciones se asocia por la
         izquierda. Por ejemplo,
                mult x y z
         representa a
                ((mult x) y) z
         Nota: Todas las funciones con múltiples argumentos se definen
         en forma currificada, salvo que explícitamente se diga que los
         argumentos tienen que ser tuplas.

                                                                             21 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    22 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    23 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Tipos polimórficos
         Un tipo es polimórfico (“tiene muchas formas”) si contiene una
         variable de tipo.
         Una función es polimórfica si su tipo es polimórfico.
         La función length es polimófica:
                 Comprobación:
                   Prelude> :type length
                   length :: [a] -> Int
                 Significa que que para cualquier tipo a, length toma una lista de
                 elementos de tipo a y devuelve un entero.
                 a es una variable de tipos.
                 Las variables de tipos tienen que empezar por minúscula.
                 Ejemplos:
                   length [1, 4, 7, 1]                                   4
                   length ["Lunes", "Martes", "Jueves"]                  3
                   length [reverse, tail]                                2
                                                                                    24 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos polimórficos



Ejemplos de funciones polimórficas
         fst :: (a, b) -> a
          fst (1,'x')           1
          fst (True,"Hoy")      True
         head :: [a] -> a
          head [2,1,4]        2
          head ['b','c']      'b'
         take :: Int -> [a] -> [a]
          take 3 [3,5,7,9,4]            [3,5,7]
          take 2 ['l','o','l','a']      "lo"
          take 2 "lola"                 "lo"
         zip :: [a] -> [b] -> [(a, b)]
          zip [3,5] "lo"      [(3,'l'),(5,'o')]
         id :: a -> a
          id 3        3
          id 'x'      'x'                         25 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga
       Tipos polimórficos
       Tipos sobrecargados

 6. Clases básicas
                                    26 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Tipos sobrecargados
         Un tipo está sobrecargado si contiene una restricción de clases.
         Una función está sobregargada si su tipo está sobrecargado.
         La función sum está sobrecargada:
                 Comprobación:
                   Prelude> :type sum
                   sum :: (Num a) => [a] -> a
                 Significa que que para cualquier tipo numérico a, sum toma una
                 lista de elementos de tipo a y devuelve un valor de tipo a.
                 Num a es una restricción de clases.
                 Las restricciones de clases son expresiones de la forma C a, donde
                 C es el nombre de una clase y a es una variable de tipo.
                 Ejemplos:
                   sum [2, 3, 5]                       10
                   sum [2.1, 3.23, 5.345]              10.675
                                                                                      27 / 38
IM Tema 3: Tipos y clases
  Polimorfismo y sobrecarga
     Tipos sobrecargados



Ejemplos de tipos sobrecargados
         Ejemplos de funciones sobrecargadas:
                 (-)         ::   (Num   a)   =>   a   ->   a -> a
                 (*)         ::   (Num   a)   =>   a   ->   a -> a
                 negate      ::   (Num   a)   =>   a   ->   a
                 abs         ::   (Num   a)   =>   a   ->   a
                 signum      ::   (Num   a)   =>   a   ->   a
         Ejemplos de números sobrecargados:
                 5   :: (Num t) => t
                 5.2 :: (Fractional t) => t




                                                                     28 / 38
IM Tema 3: Tipos y clases
  Clases básicas




Tema 3: Tipos y clases

 1. Conceptos básicos sobre tipos

 2. Tipos básicos

 3. Tipos compuestos

 4. Parcialización

 5. Polimorfismo y sobrecarga

 6. Clases básicas


                                    29 / 38
IM Tema 3: Tipos y clases
  Clases básicas




Clases básicas
         Una clase es una colección de tipos junto con ciertas operaciones
         sobrecargadas llamadas métodos.
         Clases básicas:
                 Eq             tipos   comparables por igualdad
                 Ord            tipos   ordenados
                 Show           tipos   mostrables
                 Read           tipos   legibles
                 Num            tipos   numéricos
                 Integral       tipos   enteros
                 Fractional     tipos   fraccionarios




                                                                             30 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Eq (tipos comparables por igualdad)
         Eq contiene los tipos cuyos valores con comparables por igualdad.
         Métodos:
          (==) :: a -> a -> Bool
          (/=) :: a -> a -> Bool
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          False == True                     False
          False /= True                     True
          'a' == 'b'                        False
          "aei" == "aei"                    True
          [2,3] == [2,3,2]                  False
          ('a',5) == ('a',5)                True
                                                                             31 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Ord (tipos ordenados)
         Ord es la subclase de Eq de tipos cuyos valores están ordenados.
         Métodos:
          (<), (<=), (>), (>=) :: a -> a -> Bool
          min, max                 :: a -> a -> a
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          False < True                            True
          min 'a' 'b'                             'a'
          "elegante" < "elefante"                 False
          [1,2,3] < [1,2]                         False
          ('a',2) < ('a',1)                       False
          ('a',2) < ('b',1)                       True
                                                                            32 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Show (tipos mostrables)
         Show contiene los tipos cuyos valores se pueden convertir en
         cadenas de caracteres.
         Método:
          show :: a -> String
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          show False                    "False"
          show 'a'                      "'a'"
          show 123                      "123"
          show [1,2,3]                  "[1,2,3]"
          show ('a',True)               "('a',True)"
                                                                        33 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Read (tipos legibles)
         Read contiene los tipos cuyos valores se pueden obtener a partir
         de cadenas de caracteres.
         Método:
          read :: String -> a
         Instancias:
                   Bool, Char, String, Int, Integer, Float y Double.
                   tipos compuestos: listas y tuplas.
         Ejemplos:
          read "False" :: Bool                                   False
          read "'a'" :: Char                                     'a'
          read "123" :: Int                                      123
          read "[1,2,3]" :: [Int]                                [1,2,3]
          read "('a',True)" :: (Char,Bool)                       ('a',True)
                                                                              34 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Num (tipos numéricos)
         Num es la subclase de Eq y Ord de tipos cuyos valores son
         números
         Métodos:
          (+), (*), (-)       :: a -> a -> a
          negate, abs, signum :: a -> a
         Instancias: Int, Integer, Float y Double.
         Ejemplos:
          2+3                 5
          2.3+4.2             6.5
          negate 2.7          -2.7
          abs (-5)            5
          signum (-5)         -1

                                                                     35 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Integral (tipos enteros)
         Integral es la subclase de Num cuyo tipos tienen valores enteros.
         Métodos:
          div :: a -> a -> a
          mod :: a -> a -> a
         Instancias: Int e Integer.
         Ejemplos:
          11 `div` 4         2
          11 `mod` 4         3




                                                                             36 / 38
IM Tema 3: Tipos y clases
  Clases básicas




La clase Fractional (tipos fraccionarios)
         Fractional es la subclase de Num cuyo tipos tienen valores no
         son enteros.
         Métodos:
          (/) :: a -> a -> a
          recip :: a -> a
         Instancias: Float y Double.
         Ejemplos:
          7.0 / 2.0         3.5
          recip 0.2         5.0




                                                                         37 / 38
IM Tema 3: Tipos y clases
  Bibliografía




Bibliografía
    1. R. Bird. Introducción a la programación funcional con Haskell.
       Prentice Hall, 2000.
                 Cap. 2: Tipos de datos simples.
    2. G. Hutton Programming in Haskell. Cambridge University Press,
       2007.
                 Cap. 3: Types and classes.
    3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
       O’Reilly, 2008.
                 Cap. 2: Types and Functions.
    4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando
       con Haskell. Thompson, 2004.
                 Cap. 2: Introducción a Haskell.
                 Cap. 5: El sistema de clases de Haskell.
    5. S. Thompson. Haskell: The Craft of Functional Programming,
       Second Edition. Addison-Wesley, 1999.
                 Cap. 3: Basic types and definitions.
                                                                         38 / 38

Weitere ähnliche Inhalte

Was ist angesagt?

Esquema algorítmico del backtracking
Esquema algorítmico del  backtrackingEsquema algorítmico del  backtracking
Esquema algorítmico del backtrackingWilmer Quintero
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Osiris Mirerus
 
Tipos de usuarios de base de datos diapositivas
Tipos de usuarios de base de datos diapositivasTipos de usuarios de base de datos diapositivas
Tipos de usuarios de base de datos diapositivasgrupo niche ortega
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoTAtiizz Villalobos
 
Reglas y hechos IA
Reglas y hechos IAReglas y hechos IA
Reglas y hechos IALuis Álamo
 
BúSqueda Primero En Anchura
BúSqueda Primero En AnchuraBúSqueda Primero En Anchura
BúSqueda Primero En Anchuramapaz91
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedioEmanuel Gs
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmosAlvaro Enrique Ruano
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoActimel
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1Germania Rodriguez
 
Tecnica de Prueba de Software
Tecnica de Prueba de SoftwareTecnica de Prueba de Software
Tecnica de Prueba de Softwarejose_torres123
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 

Was ist angesagt? (20)

Automatas y gramaticas
Automatas y gramaticasAutomatas y gramaticas
Automatas y gramaticas
 
Esquema algorítmico del backtracking
Esquema algorítmico del  backtrackingEsquema algorítmico del  backtracking
Esquema algorítmico del backtracking
 
Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1Alfabetos-Lenguajes y Automatas 1
Alfabetos-Lenguajes y Automatas 1
 
Modelo de entidad relación extendido
Modelo de entidad relación extendidoModelo de entidad relación extendido
Modelo de entidad relación extendido
 
Tipos de usuarios de base de datos diapositivas
Tipos de usuarios de base de datos diapositivasTipos de usuarios de base de datos diapositivas
Tipos de usuarios de base de datos diapositivas
 
Metamodelo UML
Metamodelo UMLMetamodelo UML
Metamodelo UML
 
Unidad 2 expresiones regulares
Unidad 2 expresiones regularesUnidad 2 expresiones regulares
Unidad 2 expresiones regulares
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Reglas y hechos IA
Reglas y hechos IAReglas y hechos IA
Reglas y hechos IA
 
BúSqueda Primero En Anchura
BúSqueda Primero En AnchuraBúSqueda Primero En Anchura
BúSqueda Primero En Anchura
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedio
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Colecciones en Python
Colecciones en PythonColecciones en Python
Colecciones en Python
 
Listas, pilas y colas
Listas, pilas y colasListas, pilas y colas
Listas, pilas y colas
 
POO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y PolimorfismoPOO: Herencia, Abstraccion y Polimorfismo
POO: Herencia, Abstraccion y Polimorfismo
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Colas estáticas. IESIT
Colas estáticas. IESITColas estáticas. IESIT
Colas estáticas. IESIT
 
Automatas y compiladores clase1
Automatas y compiladores clase1Automatas y compiladores clase1
Automatas y compiladores clase1
 
Tecnica de Prueba de Software
Tecnica de Prueba de SoftwareTecnica de Prueba de Software
Tecnica de Prueba de Software
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 

Andere mochten auch

Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellJosé A. Alonso
 
Tema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en HaskellTema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en HaskellJosé A. Alonso
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellSoftware Guru
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.camilo199
 
¿Que es un icono y para que sirve
¿Que es un icono y para que sirve¿Que es un icono y para que sirve
¿Que es un icono y para que sirveJoshep Aguirre
 
Original Curry
Original CurryOriginal Curry
Original CurryPATISELE
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lispyamies
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellJosé A. Alonso
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Ernes 28
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...carolina peña
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentaciónIvarra
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaMarvin Romero
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell José A. Alonso
 
Para que nos sirven las tics
Para que nos sirven las ticsPara que nos sirven las tics
Para que nos sirven las ticsGemaxDLR
 
TIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONTIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONjhohamn
 

Andere mochten auch (20)

Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
Tema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en HaskellTema 9: Declaraciones de tipos y clases en Haskell
Tema 9: Declaraciones de tipos y clases en Haskell
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 
Tipos de memoria.
Tipos de memoria.Tipos de memoria.
Tipos de memoria.
 
Yesod Framework
Yesod FrameworkYesod Framework
Yesod Framework
 
Bt haskell-1
Bt haskell-1Bt haskell-1
Bt haskell-1
 
¿Que es un icono y para que sirve
¿Que es un icono y para que sirve¿Que es un icono y para que sirve
¿Que es un icono y para que sirve
 
Original Curry
Original CurryOriginal Curry
Original Curry
 
KDE Connect
KDE ConnectKDE Connect
KDE Connect
 
Tipos De Datos Lisp
Tipos De Datos LispTipos De Datos Lisp
Tipos De Datos Lisp
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1Tipos de lenguaje de programacion part 1
Tipos de lenguaje de programacion part 1
 
Tipos de programacion
Tipos de programacionTipos de programacion
Tipos de programacion
 
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
2.1 elemento básicos del lenguaje de programación estructurado manipulación b...
 
Programación estructurada presentación
Programación estructurada presentaciónProgramación estructurada presentación
Programación estructurada presentación
 
Importancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN EstructuradaImportancia De La ProgramacióN Estructurada
Importancia De La ProgramacióN Estructurada
 
Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell Tema 6: Definiciones por recursión en Haskell
Tema 6: Definiciones por recursión en Haskell
 
Para que nos sirven las tics
Para que nos sirven las ticsPara que nos sirven las tics
Para que nos sirven las tics
 
TIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACIONTIPOS DE ESTRUCTURAS DE PROGRAMACION
TIPOS DE ESTRUCTURAS DE PROGRAMACION
 

Ähnlich wie Tema 3: Tipos y clases en Haskell

Ähnlich wie Tema 3: Tipos y clases en Haskell (11)

2.4 tipo de dato entero
2.4 tipo de dato entero2.4 tipo de dato entero
2.4 tipo de dato entero
 
tipos
tipos tipos
tipos
 
Tipos de datos_en_c_(2)
Tipos de datos_en_c_(2)Tipos de datos_en_c_(2)
Tipos de datos_en_c_(2)
 
Modulo2a
Modulo2aModulo2a
Modulo2a
 
Tema 2 tipos de datos y expresiones en java por gio
Tema 2   tipos de datos y expresiones en java por gioTema 2   tipos de datos y expresiones en java por gio
Tema 2 tipos de datos y expresiones en java por gio
 
EXPO PYTHON.pptx
EXPO PYTHON.pptxEXPO PYTHON.pptx
EXPO PYTHON.pptx
 
Tipos de datos para C++
Tipos de datos para C++Tipos de datos para C++
Tipos de datos para C++
 
9. listas y for-in
9.  listas y for-in9.  listas y for-in
9. listas y for-in
 
8 tipos variables constantes
8 tipos variables constantes8 tipos variables constantes
8 tipos variables constantes
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Fundamentos de java I
Fundamentos de java IFundamentos de java I
Fundamentos de java I
 

Mehr von José A. Alonso

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosJosé A. Alonso
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaJosé A. Alonso
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosJosé A. Alonso
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 

Mehr von José A. Alonso (20)

Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
Tema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmosTema 23: Técnicas de diseño descendente de algoritmos
Tema 23: Técnicas de diseño descendente de algoritmos
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsqueda
 
I1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntosI1M-T17: El TAD de los conjuntos
I1M-T17: El TAD de los conjuntos
 
Panorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenadorPanorama de la demostración asistida por ordenador
Panorama de la demostración asistida por ordenador
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 

Kürzlich hochgeladen

VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptAlberto Rubio
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressionsConsueloSantana3
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfluisantoniocruzcorte1
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfCarol Andrea Eraso Guerrero
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfEDILIAGAMBOA
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 

Kürzlich hochgeladen (20)

VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).pptPINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
PINTURA ITALIANA DEL CINQUECENTO (SIGLO XVI).ppt
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Uses of simple past and time expressions
Uses of simple past and time expressionsUses of simple past and time expressions
Uses of simple past and time expressions
 
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdfÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
ÉTICA, NATURALEZA Y SOCIEDADES_3RO_3ER TRIMESTRE.pdf
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdfTarea 5-Selección de herramientas digitales-Carol Eraso.pdf
Tarea 5-Selección de herramientas digitales-Carol Eraso.pdf
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
PPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdfPPT_Formación integral y educación CRESE (1).pdf
PPT_Formación integral y educación CRESE (1).pdf
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 

Tema 3: Tipos y clases en Haskell

  • 1. Tema 3: Tipos y clases Informática (2010–11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
  • 2. IM Tema 3: Tipos y clases Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 2 / 38
  • 3. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 3 / 38
  • 4. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos ¿Qué es un tipo? Un tipo es una colección de valores relacionados. Un ejemplo de tipos es el de los valores booleanos: Bool El tipo Bool tiene dos valores True (verdadero) y False (falso). v :: T representa que v es un valor del tipo T y se dice que “v tiene tipo T”. Cálculo de tipo con :type Prelude> :type True True :: Bool Prelude> :type False False :: Bool El tipo Bool -> Bool está formado por todas las funciones cuyo argumento y valor son booleanos. Ejemplo de tipo Bool -> Bool Prelude> :type not not :: Bool -> Bool 4 / 38
  • 5. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Inferencia de tipos Regla de inferencia de tipos f :: A → B e :: A f e :: B Tipos de expresiones: Prelude> :type not True not True :: Bool Prelude> :type not False not False :: Bool Prelude> :type not (not False) not (not False) :: Bool Error de tipo: Prelude> :type not 3 Error: No instance for (Num Bool) Prelude> :type 1 + False Error: No instance for (Num Bool) 5 / 38
  • 6. IM Tema 3: Tipos y clases Conceptos básicos sobre tipos Ventajas de los tipos Los lenguajes en los que la inferencia de tipo precede a la evaluación se denominan de tipos seguros. Haskell es un lenguaje de tipos seguros. En los lenguajes de tipos seguros no ocurren errores de tipos durante la evaluación. La inferencia de tipos no elimina todos los errores durante la evaluación. Por ejemplo, Prelude> :type 1 `div` 0 1 `div` 0 :: (Integral t) => t Prelude> 1 `div` 0 *** Exception: divide by zero 6 / 38
  • 7. IM Tema 3: Tipos y clases Tipos básicos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 7 / 38
  • 8. IM Tema 3: Tipos y clases Tipos básicos Tipos básicos Bool (Valores lógicos): Sus valores son True y False. Char (Caracteres): Ejemplos: ’a’, ’B’, ’3’, ’+’ String (Cadena de caracteres): Ejemplos: "abc", "1 + 2 = 3" Int (Enteros de precisión fija): Enteros entre −231 y 231 − 1. Ejemplos: 123, -12 Integer (Enteros de precisión arbitraria): Ejemplos: 1267650600228229401496703205376. Float (Reales de precisión arbitraria): Ejemplos: 1.2, -23.45, 45e-7 Double (Reales de precisión doble): Ejemplos: 1.2, -23.45, 45e-7 8 / 38
  • 9. IM Tema 3: Tipos y clases Tipos compuestos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 9 / 38
  • 10. IM Tema 3: Tipos y clases Tipos compuestos Tipos listas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 10 / 38
  • 11. IM Tema 3: Tipos y clases Tipos compuestos Tipos listas Tipos listas Una lista es una sucesión de elementos del mismo tipo. [T] es el tipo de las listas de elementos de tipo T. Ejemplos de listas: [False, True] :: [Bool] ['a','b','d'] :: [Char] ["uno","tres"] :: [String] Longitudes: La longitud de una lista es el número de elementos. La lista de longitud 0, [], es la lista vacía. Las listas de longitud 1 se llaman listas unitarias. Comentarios: El tipo de una lista no informa sobre su longitud: ['a','b'] :: [Char] ['a','b','c'] :: [Char] El tipo de los elementos de una lista puede ser cualquiera: [['a','b'],['c']] :: [[Char]] 11 / 38
  • 12. IM Tema 3: Tipos y clases Tipos compuestos Tipos tuplas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 12 / 38
  • 13. IM Tema 3: Tipos y clases Tipos compuestos Tipos tuplas Tipos tuplas Una tupla es una sucesión de elementos. (T1 , T2 , . . . , Tn ) es el tipo de las n–tuplas cuya componente i–ésima es de tipo Ti . Ejemplos de tuplas: (False,True) :: (Bool,Bool) (False,'a',True) :: (Bool,Char,Bool) Aridades: La aridad de una tupla es el número de componentes. La tupla de aridad 0, (), es la tupla vacía. No están permitidas las tuplas de longitud 1. Comentarios: El tipo de una tupla informa sobre su longitud: ('a','b') :: (Char,Char) ('a','b','c') :: (Char,Char,Char) El tipo de los elementos de una tupla puede ser cualquiera: (('a','b'),['c','d']) :: ((Char,Char),[Char]) 13 / 38
  • 14. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos Tipos listas Tipos tuplas Tipos funciones 4. Parcialización 5. Polimorfismo y sobrecarga 14 / 38
  • 15. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Tipos funciones Una función es una aplicación de valores de un tipo en valores de otro tipo. T1 → T2 es el tipo de las funciones que aplica valores del tipo T1 en valores del tipo T2 . Ejemplos de funciones: not :: Bool -> Bool isDigit :: Char -> Bool 15 / 38
  • 16. IM Tema 3: Tipos y clases Tipos compuestos Tipos funciones Funciones con múltiples argumentos o valores Ejemplo de función con múltiples argumentos: suma (x,y) es la suma de x e y. Por ejemplo, suma (2,3) es 5. suma :: (Int,Int) -> Int suma (x,y) = x+y Ejemplo de función con múltiples valores: deCeroA 5 es la lista de los números desde 0 hasta n. Por ejemplo, deCeroA n es [0,1,2,3,4,5]. deCeroA :: Int -> [Int] deCeroA n = [0..n] Notas: 1. En las definiciones se ha escrito la signatura de las funciones. 2. No es obligatorio escribir la signatura de las funciones. 3. Es conveniente escribir las signatura. 16 / 38
  • 17. IM Tema 3: Tipos y clases Parcialización Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 17 / 38
  • 18. IM Tema 3: Tipos y clases Parcialización Parcialización Mecanismo de parcialización (currying en inglés): Las funciones de más de un argumento pueden interpretarse como funciones que toman un argumento y devuelven otra función con un argumento menos. Ejemplo de parcialización: suma' :: Int -> (Int -> Int) suma' x y = x+y suma’ toma un entero x y devuelve la función suma’ x que toma un entero y y devuelve la suma de x e y. Por ejemplo, *Main> :type suma' 2 suma' 2 :: Int -> Int *Main> :type suma' 2 3 suma' 2 3 :: Int 18 / 38
  • 19. IM Tema 3: Tipos y clases Parcialización Parcialización con tres argumentos Ejemplo de parcialización con tres argumentos: mult :: Int -> (Int -> (Int -> Int)) mult x y z = x*y*z mult toma un entero x y devuelve la función mult x que toma un entero y y devuelve la función mult x y que toma un entero z y devuelve x*y*z. Por ejemplo, *Main> :type mult 2 mult 2 :: Int -> (Int -> Int) *Main> :type mult 2 3 mult 2 3 :: Int -> Int *Main> :type mult 2 3 7 mult 2 3 7 :: Int 19 / 38
  • 20. IM Tema 3: Tipos y clases Parcialización Aplicación parcial Las funciones que toman sus argumentos de uno en uno se llaman currificadas (curried en inglés). Las funciones suma’ y mult son currificadas. Las funciones currificadas pueden aplicarse parcialmente. Por ejemplo, *Main> (suma' 2) 3 5 Pueden definirse funciones usando aplicaciones parciales. Por ejemplo, suc :: Int -> Int suc = suma' 1 suc x es el sucesor de x. Por ejemplo, suc 2 es 3. 20 / 38
  • 21. IM Tema 3: Tipos y clases Parcialización Convenios para reducir paréntesis Convenio 1: Las flechas en los tipos se asocia por la derecha. Por ejemplo, Int -> Int -> Int -> Int representa a Int -> (Int -> (Int -> Int)) Convenio 2: Las aplicaciones de funciones se asocia por la izquierda. Por ejemplo, mult x y z representa a ((mult x) y) z Nota: Todas las funciones con múltiples argumentos se definen en forma currificada, salvo que explícitamente se diga que los argumentos tienen que ser tuplas. 21 / 38
  • 22. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 22 / 38
  • 23. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 23 / 38
  • 24. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Tipos polimórficos Un tipo es polimórfico (“tiene muchas formas”) si contiene una variable de tipo. Una función es polimórfica si su tipo es polimórfico. La función length es polimófica: Comprobación: Prelude> :type length length :: [a] -> Int Significa que que para cualquier tipo a, length toma una lista de elementos de tipo a y devuelve un entero. a es una variable de tipos. Las variables de tipos tienen que empezar por minúscula. Ejemplos: length [1, 4, 7, 1] 4 length ["Lunes", "Martes", "Jueves"] 3 length [reverse, tail] 2 24 / 38
  • 25. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos polimórficos Ejemplos de funciones polimórficas fst :: (a, b) -> a fst (1,'x') 1 fst (True,"Hoy") True head :: [a] -> a head [2,1,4] 2 head ['b','c'] 'b' take :: Int -> [a] -> [a] take 3 [3,5,7,9,4] [3,5,7] take 2 ['l','o','l','a'] "lo" take 2 "lola" "lo" zip :: [a] -> [b] -> [(a, b)] zip [3,5] "lo" [(3,'l'),(5,'o')] id :: a -> a id 3 3 id 'x' 'x' 25 / 38
  • 26. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga Tipos polimórficos Tipos sobrecargados 6. Clases básicas 26 / 38
  • 27. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Tipos sobrecargados Un tipo está sobrecargado si contiene una restricción de clases. Una función está sobregargada si su tipo está sobrecargado. La función sum está sobrecargada: Comprobación: Prelude> :type sum sum :: (Num a) => [a] -> a Significa que que para cualquier tipo numérico a, sum toma una lista de elementos de tipo a y devuelve un valor de tipo a. Num a es una restricción de clases. Las restricciones de clases son expresiones de la forma C a, donde C es el nombre de una clase y a es una variable de tipo. Ejemplos: sum [2, 3, 5] 10 sum [2.1, 3.23, 5.345] 10.675 27 / 38
  • 28. IM Tema 3: Tipos y clases Polimorfismo y sobrecarga Tipos sobrecargados Ejemplos de tipos sobrecargados Ejemplos de funciones sobrecargadas: (-) :: (Num a) => a -> a -> a (*) :: (Num a) => a -> a -> a negate :: (Num a) => a -> a abs :: (Num a) => a -> a signum :: (Num a) => a -> a Ejemplos de números sobrecargados: 5 :: (Num t) => t 5.2 :: (Fractional t) => t 28 / 38
  • 29. IM Tema 3: Tipos y clases Clases básicas Tema 3: Tipos y clases 1. Conceptos básicos sobre tipos 2. Tipos básicos 3. Tipos compuestos 4. Parcialización 5. Polimorfismo y sobrecarga 6. Clases básicas 29 / 38
  • 30. IM Tema 3: Tipos y clases Clases básicas Clases básicas Una clase es una colección de tipos junto con ciertas operaciones sobrecargadas llamadas métodos. Clases básicas: Eq tipos comparables por igualdad Ord tipos ordenados Show tipos mostrables Read tipos legibles Num tipos numéricos Integral tipos enteros Fractional tipos fraccionarios 30 / 38
  • 31. IM Tema 3: Tipos y clases Clases básicas La clase Eq (tipos comparables por igualdad) Eq contiene los tipos cuyos valores con comparables por igualdad. Métodos: (==) :: a -> a -> Bool (/=) :: a -> a -> Bool Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: False == True False False /= True True 'a' == 'b' False "aei" == "aei" True [2,3] == [2,3,2] False ('a',5) == ('a',5) True 31 / 38
  • 32. IM Tema 3: Tipos y clases Clases básicas La clase Ord (tipos ordenados) Ord es la subclase de Eq de tipos cuyos valores están ordenados. Métodos: (<), (<=), (>), (>=) :: a -> a -> Bool min, max :: a -> a -> a Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: False < True True min 'a' 'b' 'a' "elegante" < "elefante" False [1,2,3] < [1,2] False ('a',2) < ('a',1) False ('a',2) < ('b',1) True 32 / 38
  • 33. IM Tema 3: Tipos y clases Clases básicas La clase Show (tipos mostrables) Show contiene los tipos cuyos valores se pueden convertir en cadenas de caracteres. Método: show :: a -> String Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: show False "False" show 'a' "'a'" show 123 "123" show [1,2,3] "[1,2,3]" show ('a',True) "('a',True)" 33 / 38
  • 34. IM Tema 3: Tipos y clases Clases básicas La clase Read (tipos legibles) Read contiene los tipos cuyos valores se pueden obtener a partir de cadenas de caracteres. Método: read :: String -> a Instancias: Bool, Char, String, Int, Integer, Float y Double. tipos compuestos: listas y tuplas. Ejemplos: read "False" :: Bool False read "'a'" :: Char 'a' read "123" :: Int 123 read "[1,2,3]" :: [Int] [1,2,3] read "('a',True)" :: (Char,Bool) ('a',True) 34 / 38
  • 35. IM Tema 3: Tipos y clases Clases básicas La clase Num (tipos numéricos) Num es la subclase de Eq y Ord de tipos cuyos valores son números Métodos: (+), (*), (-) :: a -> a -> a negate, abs, signum :: a -> a Instancias: Int, Integer, Float y Double. Ejemplos: 2+3 5 2.3+4.2 6.5 negate 2.7 -2.7 abs (-5) 5 signum (-5) -1 35 / 38
  • 36. IM Tema 3: Tipos y clases Clases básicas La clase Integral (tipos enteros) Integral es la subclase de Num cuyo tipos tienen valores enteros. Métodos: div :: a -> a -> a mod :: a -> a -> a Instancias: Int e Integer. Ejemplos: 11 `div` 4 2 11 `mod` 4 3 36 / 38
  • 37. IM Tema 3: Tipos y clases Clases básicas La clase Fractional (tipos fraccionarios) Fractional es la subclase de Num cuyo tipos tienen valores no son enteros. Métodos: (/) :: a -> a -> a recip :: a -> a Instancias: Float y Double. Ejemplos: 7.0 / 2.0 3.5 recip 0.2 5.0 37 / 38
  • 38. IM Tema 3: Tipos y clases Bibliografía Bibliografía 1. R. Bird. Introducción a la programación funcional con Haskell. Prentice Hall, 2000. Cap. 2: Tipos de datos simples. 2. G. Hutton Programming in Haskell. Cambridge University Press, 2007. Cap. 3: Types and classes. 3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell. O’Reilly, 2008. Cap. 2: Types and Functions. 4. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004. Cap. 2: Introducción a Haskell. Cap. 5: El sistema de clases de Haskell. 5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999. Cap. 3: Basic types and definitions. 38 / 38