Looking for haskell Answers? Try Ask4KnowledgeBase
Looking for haskell Keywords? Try Ask4Keywords

Haskell LanguageSolicitud parcial


Observaciones

Vamos a aclarar algunos conceptos erróneos que los principiantes pueden hacer.

Es posible que haya encontrado funciones tales como:

max :: (Ord a) => a -> a -> a  
max m n  
  | m >= n = m  
  | otherwise = n  

Los principiantes típicamente verán max :: (Ord a) => a -> a -> a como max :: (Ord a) => a -> a -> a función que toma dos argumentos (valores) de tipo a y devuelve un valor de tipo a . Sin embargo, lo que realmente está sucediendo es que max está tomando un argumento de tipo a y devolviendo una función de tipo a -> a . Esta función toma un argumento de tipo a y devuelve un valor final de tipo a .

De hecho, max puede escribirse como max :: (Ord a) => a -> (a -> a)

Considere la firma del tipo de max :

Prelude> :t max  
max :: Ord a => a -> a -> a  

Prelude> :t (max 75)  
(max 75) :: (Num a, Ord a) => a -> a  

Prelude> :t (max "Fury Road")  
(max "Fury Road") :: [Char] -> [Char]  

Prelude> :t (max "Fury Road" "Furiosa")  
(max "Fury Road" "Furiosa") :: [Char]  

max 75 y max "Fury Road" puede que no parezcan funciones, pero en realidad lo son.

La confusión se deriva del hecho de que en matemáticas y en muchos otros lenguajes de programación comunes, se nos permite tener funciones que toman múltiples argumentos. Sin embargo, en Haskell, las funciones solo pueden tomar un argumento y pueden devolver valores como a , o funciones como a -> a .

Solicitud parcial Ejemplos relacionados