diff options
Diffstat (limited to 'pia/n5.lyx')
| -rw-r--r-- | pia/n5.lyx | 1876 | 
1 files changed, 1876 insertions, 0 deletions
| diff --git a/pia/n5.lyx b/pia/n5.lyx new file mode 100644 index 0000000..40309cd --- /dev/null +++ b/pia/n5.lyx @@ -0,0 +1,1876 @@ +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544 +\begin_document +\begin_header +\save_transient_properties true +\origin unavailable +\textclass book +\begin_preamble +\input{../defs} +\end_preamble +\use_default_options true +\maintain_unincluded_children false +\language spanish +\language_package default +\inputencoding auto +\fontencoding global +\font_roman "default" "default" +\font_sans "default" "default" +\font_typewriter "default" "default" +\font_math "auto" "auto" +\font_default_family default +\use_non_tex_fonts false +\font_sc false +\font_osf false +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures true +\graphics default +\default_output_format default +\output_sync 0 +\bibtex_command default +\index_command default +\paperfontsize default +\spacing single +\use_hyperref false +\papersize default +\use_geometry false +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine basic +\cite_engine_type default +\biblio_style plain +\use_bibtopic false +\use_indices false +\paperorientation portrait +\suppress_date false +\justification true +\use_refstyle 1 +\use_minted 0 +\index Index +\shortcut idx +\color #008000 +\end_index +\secnumdepth 3 +\tocdepth 3 +\paragraph_separation indent +\paragraph_indentation default +\is_math_indent 0 +\math_numbering_side default +\quotes_style french +\dynamic_quotes 0 +\papercolumns 1 +\papersides 1 +\paperpagestyle default +\tracking_changes false +\output_changes false +\html_math_output 0 +\html_css_as_file 0 +\html_be_strict false +\end_header + +\begin_body + +\begin_layout Standard +Haskell tiene un preludio estándar con tipos y funciones predefinidos. +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +infixr 9 . +\end_layout + +\begin_layout Plain Layout + +infixr 8 ^ +\end_layout + +\begin_layout Plain Layout + +infixl 7 *, /, `quot`, `rem`, `div`, `mod` +\end_layout + +\begin_layout Plain Layout + +infixl 6 +, - +\end_layout + +\begin_layout Plain Layout + +infix 4 ==, /=, <, <=, >=, > +\end_layout + +\begin_layout Plain Layout + +infixr 3 && +\end_layout + +\begin_layout Plain Layout + +infixr 2 || +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +^^, .., =<<, $, $!, `seq` +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +Cuando se indica  +\family typewriter +... + +\family default + en código significa que no se puede definir en Haskell. + Si se define que un tipo es de una clase, también lo es de sus superclases, + y si no se da la definición de la instancia de superclase es porque no + se puede definir en Haskell. +\end_layout + +\begin_layout Section +Clases derivables +\end_layout + +\begin_layout Standard +Estas clases se pueden derivar en una instancia  +\family typewriter +data +\family default + con al menos un constructor o una  +\family typewriter +newtype +\family default + si todos los tipos en los parámetros de todos los constructores son instancias + de la clase en algún contexto y no hay una declaración de instancia que + haga conflicto. +\end_layout + +\begin_layout Standard + +\family typewriter +() +\family default +,  +\family typewriter +(a,b) +\family default + y  +\family typewriter +(a,b,c) +\family default + implementan  +\family typewriter +Eq +\family default +,  +\family typewriter +Ord +\family default + y  +\family typewriter +Bounded +\family default + como se indica, y  +\family typewriter +() +\family default + también implementa  +\family typewriter +Enum +\family default +. +\end_layout + +\begin_layout Subsection + +\family typewriter +Eq +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +class Eq a where  {-# MINIMAL (==) | (/=) #-} +\end_layout + +\begin_layout Plain Layout + +    (==), (/=) :: a -> a -> Bool +\end_layout + +\begin_layout Plain Layout + +    x /= y = not (x == y) +\end_layout + +\begin_layout Plain Layout + +    x == y = not (x /= y) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +\emph on +a +\emph default + ==  +\emph on +b +\family default +\emph default + si  +\family typewriter +\emph on +a +\family default +\emph default + y  +\family typewriter +\emph on +b +\family default +\emph default + tienen el mismo constructor y todos sus campos son iguales ( +\family typewriter +== +\family default +), salvo que si un campo de  +\family typewriter +\emph on +a +\family default +\emph default + o  +\family typewriter +\emph on +b +\family default +\emph default + es  +\begin_inset Formula $\bot$ +\end_inset + +,  +\family typewriter +\emph on +a +\emph default + ==  +\emph on +b +\family default +\emph default + devuelve  +\begin_inset Formula $\bot$ +\end_inset + + si todos los campos anteriores al primer  +\begin_inset Formula $\bot$ +\end_inset + + son iguales, y si  +\family typewriter +\emph on +a +\family default +\emph default + o  +\family typewriter +\emph on +b +\family default +\emph default + es  +\begin_inset Formula $\bot$ +\end_inset + + el resultado es  +\begin_inset Formula $\bot$ +\end_inset + +. +\end_layout + +\begin_layout Subsection + +\family typewriter +Ord +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +data Ordering = LT | EQ | GT +\end_layout + +\begin_layout Plain Layout + +	deriving (Eq, Ord, Enum, Read, Show, Bounded) +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class (Eq a) => Ord a where  {-# MINIMAL compare | (<=) #-} +\end_layout + +\begin_layout Plain Layout + +	compare :: a -> a -> Ordering +\end_layout + +\begin_layout Plain Layout + +	(<), (<=), (>=), (>) :: a -> a -> Bool +\end_layout + +\begin_layout Plain Layout + +	max, min :: a -> a -> a +\end_layout + +\begin_layout Plain Layout + +	compare x y +\end_layout + +\begin_layout Plain Layout + +		| x == y    = EQ +\end_layout + +\begin_layout Plain Layout + +		| x <= y    = LT +\end_layout + +\begin_layout Plain Layout + +		| True      = GT +\end_layout + +\begin_layout Plain Layout + +	x <= y = compare x y /= GT +\end_layout + +\begin_layout Plain Layout + +	x <  y = compare x y == LT +\end_layout + +\begin_layout Plain Layout + +	x >= y = compare x y /= LT +\end_layout + +\begin_layout Plain Layout + +	x >  y = compare x y == GT +\end_layout + +\begin_layout Plain Layout + +    max x y = if x <= y then y else x +\end_layout + +\begin_layout Plain Layout + +	min x y = if x <= y then x else y +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +\emph on +a +\emph default + <=  +\emph on +b +\family default +\emph default + si  +\family typewriter +\emph on +a  +\emph default +==  +\emph on +b +\family default +\emph default +,  +\family typewriter +\emph on +a +\family default +\emph default + tiene un constructor definido más a la izquierda que el de  +\family typewriter +\emph on +b +\family default +\emph default + o ambos tienen el mismo y existe un campo cuyo valor en  +\family typewriter +\emph on +a +\family default +\emph default + es menor ( +\family typewriter +< +\family default +) que en  +\family typewriter +\emph on +b +\family default +\emph default + y todos los anteriores son iguales, salvo que  +\family typewriter +(<=) +\family default + devuelve  +\begin_inset Formula $\bot$ +\end_inset + + en los mismos casos que  +\family typewriter +(==) +\family default +. +\end_layout + +\begin_layout Subsection + +\family typewriter +Bounded +\end_layout + +\begin_layout Standard +Sólo si ningún constructor tiene campos o solo hay un constructor. +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +class Bounded a where +\end_layout + +\begin_layout Plain Layout + +	minBound :: a +\end_layout + +\begin_layout Plain Layout + +	maxBound :: a +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +En un enumerado,  +\family typewriter +minBound +\family default + es el elemento del primer constructor y  +\family typewriter +maxBound +\family default + el del último, y en otro caso  +\family typewriter +minBound +\family default + y  +\family typewriter +maxBound +\family default + son los elementos del único constructor con el  +\family typewriter +minBound +\family default + o el  +\family typewriter +maxBound +\family default + de cada campo. +\end_layout + +\begin_layout Subsection + +\family typewriter +Enum +\end_layout + +\begin_layout Standard +Sólo si ningún constructor tiene campos. +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +class Enum a where +\end_layout + +\begin_layout Plain Layout + +	toEnum :: Int -> a +\end_layout + +\begin_layout Plain Layout + +	fromEnum :: a -> Int +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +toEnum 0 +\family default + devuelve el primer elemento del enumerado (el del primer constructor), +  +\family typewriter +toEnum 1 +\family default + el segundo, etc., y  +\family typewriter +toEnum  +\emph on +a +\family default +\emph default + devuelve  +\begin_inset Formula $\bot$ +\end_inset + + para una entrada no definida. +  +\family typewriter +fromEnum +\family default + es la inversa de  +\family typewriter +toEnum +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +succ, pred, enumFrom, enumThen, enumFromTo, enumFromThenTo +\end_layout + +\end_inset + + +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +enumFrom y enumFromThen se definen de forma especial. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Subsection + +\family typewriter +Show +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +type ShowS = String -> String +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class Show a where  {-# MINIMAL showsPrec | show #-} +\end_layout + +\begin_layout Plain Layout + +    showsPrec :: Int -> a -> ShowS +\end_layout + +\begin_layout Plain Layout + +    show :: a -> String +\end_layout + +\begin_layout Plain Layout + +    showsPrec _ x s = show x ++ s +\end_layout + +\begin_layout Plain Layout + +    show x = showsPrec 0 x  +\begin_inset Quotes cld +\end_inset + + +\begin_inset Quotes crd +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +showsPrec  +\emph on +d x r +\family default +\emph default + devuelve una representación de  +\family typewriter +\emph on +x +\family default +\emph default + como expresión Haskell, entre paréntesis si el constructor de  +\family typewriter +\emph on +x +\family default +\emph default + tiene precedencia menor que  +\family typewriter +\emph on +d +\family default +\emph default + considerando que la precedencia de una aplicación funcional es 10, seguida + de  +\family typewriter +\emph on +r +\family default +\emph default +. +  +\end_layout + +\begin_layout Standard +La representación está formada por el nombre del constructor y las representacio +nes de los parámetros según su  +\family typewriter +showsPrec +\family default +, posiblemente separados por espacios, y añadiendo paréntesis si hacen falta + por precedencia aunque no hagan falta por asociatividad. + El constructor se muestra en forma infija si y sólo si es un  +\family typewriter +qconop +\family default +, y si usa sintaxis con llaves, la representación también, con los campos + en el mismo orden. + Puede haber más espaciado o paréntesis de lo necesario. +\end_layout + +\begin_layout Subsection + +\family typewriter +Read +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +type ReadS a = String -> [(a, String)] +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class Read a where +\end_layout + +\begin_layout Plain Layout + +	readsPrec :: Int -> ReadS a +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +readsPrec  +\emph on +d s +\family default +\emph default + intenta leer del principio de  +\family typewriter +\emph on +s +\family default +\emph default + un elemento de tipo  +\family typewriter +\emph on +a +\family default +\emph default + devuelto por  +\family typewriter +showsPrec +\family default + y devuelve una lista de pares con el valor leído y el resto de la cadena, + que será vacía si la entrada no es correcta. +  +\family typewriter +( +\emph on +x +\emph default +, +\begin_inset Quotes qrd +\end_inset + + +\begin_inset Quotes qrd +\end_inset + +) +\family default + debe ser un elemento de  +\family typewriter +readsPrec  +\emph on +d +\emph default + (showsPrec  +\emph on +d x +\emph default +  +\begin_inset Quotes qld +\end_inset + + +\begin_inset Quotes qrd +\end_inset + +) +\family default +. +\end_layout + +\begin_layout Section +Booleanos +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +data Bool = False | True deriving (Eq, Ord, Enum, Read, Show, Bounded) +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +(&&), (||) :: Bool -> Bool -> Bool +\end_layout + +\begin_layout Plain Layout + +True  && x = x   +\end_layout + +\begin_layout Plain Layout + +False && _ = False +\end_layout + +\begin_layout Plain Layout + +True  || _ = True   +\end_layout + +\begin_layout Plain Layout + +False || x = x  +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +not :: Bool -> Bool +\end_layout + +\begin_layout Plain Layout + +not True = False   +\end_layout + +\begin_layout Plain Layout + +not False = True +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +otherwise :: Bool +\end_layout + +\begin_layout Plain Layout + +otherwise = True +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Funciones +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +seq, ($), ($!) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset listings +lstparams "language=Haskell" +inline false +status open + +\begin_layout Plain Layout + +id :: a -> a +\end_layout + +\begin_layout Plain Layout + +id x = x +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +const :: a -> b -> a +\end_layout + +\begin_layout Plain Layout + +const x _ = x +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +(.) :: (b -> c) -> (a -> b) -> a -> c +\end_layout + +\begin_layout Plain Layout + +f . + g =  +\backslash +x -> f (g x) +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +flip :: (a -> b -> c) -> b -> a -> c +\end_layout + +\begin_layout Plain Layout + +flip f x y = f y x +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +until  +\emph on +f p +\family default +\emph default + evalúa  +\family typewriter +\emph on +f +\family default +\emph default + sobre un argumento hasta que cumple  +\family typewriter +\emph on +p +\family default +\emph default +. +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +until :: (a -> Bool) -> (a -> a) -> a -> a +\end_layout + +\begin_layout Plain Layout + +until p f x  -- until p f aplica f hasta que se cumple p +\end_layout + +\begin_layout Plain Layout + +	| p x       = x +\end_layout + +\begin_layout Plain Layout + +	| otherwise = until p f (f x) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\family typewriter +error  +\emph on +s +\family default +\emph default + devuelve  +\begin_inset Formula $\bot$ +\end_inset + +. + y, cuando se evalúa, imprime el error  +\family typewriter +\emph on +s +\family default +\emph default +. +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +error :: String -> a +\end_layout + +\begin_layout Plain Layout + +error s = ... +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +undefined :: a +\end_layout + +\begin_layout Plain Layout + +undefined = error  +\begin_inset Quotes cld +\end_inset + +Prelude.undefined +\begin_inset Quotes crd +\end_inset + + +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Tuplas +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +fst :: (a, b) -> a +\end_layout + +\begin_layout Plain Layout + +fst (x, y) = x +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +snd :: (a, b) -> b +\end_layout + +\begin_layout Plain Layout + +snd (x, y) = y +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +curry :: ((a, b) -> c) -> a -> b -> c +\end_layout + +\begin_layout Plain Layout + +curry f x y = f (x, y) +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +uncurry :: (a -> b -> c) -> (a, b) -> c +\end_layout + +\begin_layout Plain Layout + +uncurry f (x, y) = f x y +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Clases numéricas +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +recip, (**), logBase, round, ceiling, floor, RealFloat +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +class (Eq a, Show a) => Num a where +\end_layout + +\begin_layout Plain Layout + +		{-# MINIMAL (+), (*), abs, signum, fromInteger, (negate | (-)) #-} +\end_layout + +\begin_layout Plain Layout + +    (+), (-), (*) :: a -> a -> a +\end_layout + +\begin_layout Plain Layout + +    negate :: a -> a +\end_layout + +\begin_layout Plain Layout + +    abs, signum :: a -> a +\end_layout + +\begin_layout Plain Layout + +    fromInteger :: Integer -> a +\end_layout + +\begin_layout Plain Layout + +    x - y = x + negate y +\end_layout + +\begin_layout Plain Layout + +    negate x = 0 - x +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class (Num a, Ord a) => Real a where +\end_layout + +\begin_layout Plain Layout + +    toRational :: a -> Rational +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class (Real a, Enum a) => Integral a where +\end_layout + +\begin_layout Plain Layout + +		{-# MINIMAL quotRem, toInteger #-} +\end_layout + +\begin_layout Plain Layout + +    quot, rem, div, mod :: a -> a -> a +\end_layout + +\begin_layout Plain Layout + +    quotRem, divMod :: a -> a -> (a,a) +\end_layout + +\begin_layout Plain Layout + +    toInteger :: a -> Integer +\end_layout + +\begin_layout Plain Layout + +    divMod n d = if signum r == - signum d +\end_layout + +\begin_layout Plain Layout + +                 then (q-1, r+d) +\end_layout + +\begin_layout Plain Layout + +                 else (q, r) +\end_layout + +\begin_layout Plain Layout + +                 where (q, r) = quotRem n d +\end_layout + +\begin_layout Plain Layout + +    n `quot` d = q where (q, r) = quotRem n d +\end_layout + +\begin_layout Plain Layout + +    n `rem` d = r where (q, r) = quotRem n d +\end_layout + +\begin_layout Plain Layout + +    n `div` d = q where (q, r) = divMod n d +\end_layout + +\begin_layout Plain Layout + +    n `mod` d = r where (q, r) = divMod n d +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class (Num a) => Fractional a where +\end_layout + +\begin_layout Plain Layout + +    (/) :: a -> a -> a +\end_layout + +\begin_layout Plain Layout + +    fromRational :: Rational -> a +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class (Fractional a) => Floating a where +\end_layout + +\begin_layout Plain Layout + +    	{#- MINIMAL pi, exp, log, sin, cos, asin, acos, atan, sinh, cosh, +\end_layout + +\begin_layout Plain Layout + +		            asinh, acosh, atanh #-} +\end_layout + +\begin_layout Plain Layout + +    pi :: a +\end_layout + +\begin_layout Plain Layout + +    exp, log, sqrt :: a -> a +\end_layout + +\begin_layout Plain Layout + +    sin, cos, tan, asin, acos, atan :: a -> a +\end_layout + +\begin_layout Plain Layout + +    sinh, cosh, tanh, asinh, acosh, atanh :: a -> a +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +    sqrt x = x ** 0.5 +\end_layout + +\begin_layout Plain Layout + +    tan x = sin x / cos x +\end_layout + +\begin_layout Plain Layout + +    tanh x = sinh x / cosh x +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class RealFrac a where  {-# MINIMAL properFraction #-} +\end_layout + +\begin_layout Plain Layout + +	properFraction :: (Integral b) => a -> (b, a) +\end_layout + +\begin_layout Plain Layout + +	truncate :: (Integral b) => a -> b +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +	truncate = fst . + properFraction +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Funciones numéricas +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +subtract, (^^), realToFrac +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +even, odd :: (Integral a) => a -> Bool +\end_layout + +\begin_layout Plain Layout + +even n = n `rem` 2 == 0 +\end_layout + +\begin_layout Plain Layout + +odd = not . + even +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +gcd, lcm :: (Integral a) => a -> a -> a +\end_layout + +\begin_layout Plain Layout + +gcd 0 0 = undefined +\end_layout + +\begin_layout Plain Layout + +gcd x y = gcd' (abs x) (abs y) +\end_layout + +\begin_layout Plain Layout + +          where gcd' x 0 = x +\end_layout + +\begin_layout Plain Layout + +                gcd' x y = gcd' y (x `rem` y) +\end_layout + +\begin_layout Plain Layout + +lcm _ 0 = 0 +\end_layout + +\begin_layout Plain Layout + +lcm 0 _ = 0 +\end_layout + +\begin_layout Plain Layout + +lcm x y = abs ((x `quot` (gcd x y)) * y) +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +(^) :: (Num a, Integral b) => a -> b -> a +\end_layout + +\begin_layout Plain Layout + +x ^ 0 = 1 +\end_layout + +\begin_layout Plain Layout + +x ^ (n+1) = x * x^n +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +fromIntegral :: (Integral a, Num b) => a -> b +\end_layout + +\begin_layout Plain Layout + +fromIntegral = fromInteger . + toInteger +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Tipos numéricos +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +instance Bounded Int where ... +\end_layout + +\begin_layout Plain Layout + +instance Integral Int where ... +\end_layout + +\begin_layout Plain Layout + +instance Integral Integer where ... +\end_layout + +\begin_layout Plain Layout + +instance RealFrac Float where ... +\end_layout + +\begin_layout Plain Layout + +instance Floating Float where ... +\end_layout + +\begin_layout Plain Layout + +instance RealFrac Double where ... +\end_layout + +\begin_layout Plain Layout + +instance Floating Double where ... +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +instance Enum Float where +\end_layout + +\begin_layout Plain Layout + +	toEnum = fromIntegral +\end_layout + +\begin_layout Plain Layout + +	fromEnum = fromInteger . + truncate +\end_layout + +\begin_layout Plain Layout + +instance Enum Double where +\end_layout + +\begin_layout Plain Layout + +	toEnum = fromIntegral +\end_layout + +\begin_layout Plain Layout + +	fromEnum = fromInteger . + truncate +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Caracteres +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +instance Enum Char where ... +\end_layout + +\begin_layout Plain Layout + +instance Bounded Char where +\end_layout + +\begin_layout Plain Layout + +	minBound = ' +\backslash +0' +\end_layout + +\begin_layout Plain Layout + +	maxBound = ... +\end_layout + +\begin_layout Plain Layout + +instance Eq Char where +\end_layout + +\begin_layout Plain Layout + +	c == c' = fromEnum c == fromEnum c' +\end_layout + +\begin_layout Plain Layout + +instance Ord Char where +\end_layout + +\begin_layout Plain Layout + +	c <= c' = fromEnum c <= fromEnum c' +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +type String = [Char] +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Mónadas +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +fail, sequence, sequence_, mapM, mapM_, (=<<) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +class Functor f where +\end_layout + +\begin_layout Plain Layout + +	fmap :: (a -> b) -> f a -> f b +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +class Monad m where  {#- MINIMAL (>>=), return -#} +\end_layout + +\begin_layout Plain Layout + +	(>>=) :: m a -> (a -> m b) -> m b +\end_layout + +\begin_layout Plain Layout + +	(>>) :: m a -> m b -> m b +\end_layout + +\begin_layout Plain Layout + +	return :: a -> m a +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +	m >> k = m >>=  +\backslash +_ -> k +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Section +Tipos monádicos +\end_layout + +\begin_layout Standard +\begin_inset listings +inline false +status open + +\begin_layout Plain Layout + +data Either a b = Left a | Right b deriving (Eq, Ord, Read, Show) +\end_layout + +\begin_layout Plain Layout + +data IO a = ... +\end_layout + +\begin_layout Plain Layout + +instance Monad IO where ... +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Comment +status open + +\begin_layout Plain Layout +Maybe, maybe, either, instance Functor IO, instance Monad IO, instance Functor + [], instance Monad [] +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Note Note +status open + +\begin_layout Plain Layout +Complex, read +\end_layout + +\begin_layout Plain Layout +Eq a => Eq [a] +\end_layout + +\begin_layout Plain Layout +Ord a => Ord [a] +\end_layout + +\begin_layout Plain Layout +putStr +\end_layout + +\end_inset + + +\end_layout + +\end_body +\end_document | 
