tuplas tipos sobre sirve que para opciones multiplicar hacer funciones ejemplos definir como basico haskell types parentheses

tipos - haskell para que sirve



¿Cuál es el significado de paréntesis en las firmas de tipo Haskell? (3)

Tome la firma de tipo de fmap (el método Functor ) como ejemplo:

(a -> b) -> f a -> f b

¿En qué se diferencia de la siguiente firma de tipo?

a -> b -> f a -> f b

¿Hay incluso una diferencia entre esos dos tipos de firmas?


Sí,

(a -> b) -> ...

significa "dada una función que toma a a b ...". Mientras esto

a -> b -> ...

significa "dado algunos a y algunos b ..."


Sí, el (a -> b) significa un argumento que es una función con la firma a -> b , mientras que a -> b -> ... significa dos argumentos.


Sí, hay una diferencia, porque el constructor de tipo -> es asociativo a la derecha . En otras palabras,

a -> b -> f a -> f b

es equivalente a

a -> (b -> (f a -> f b))

Esta firma de tipo denota una función que toma un parámetro de tipo a y devuelve una función, que a su vez toma un parámetro de tipo b y devuelve una función, que toma un parámetro de tipo fa y devuelve un valor de tipo fb .

Por otra parte,

(a -> b) -> f a -> f b

denota una función que toma un parámetro de tipo a -> b (es decir, una función que toma un parámetro de tipo a y devuelve un valor de tipo b ) y devuelve una función, que a su vez toma un parámetro de tipo fa y devuelve un valor de tipo fb .

Aquí hay un ejemplo artificial que ilustra la diferencia entre las dos firmas de tipo:

f :: (Int -> Bool) -> [Int] -> [Bool] f = map g :: Int -> Bool -> [Int] -> [Bool] g n b = map (/n'' -> (n'' == n) == b) λ> let ns = [42, 13, 42, 17] λ> f (== 42) ns [True,False,True,False] λ> g 42 True ns [True,False,True,False] λ> g 42 False ns [False,True,False,True]