world tutorial simbolos online hello descargar constructora company haskell

tutorial - haskell simbolos



¿Por qué Haskell tiene una "identificación invertida" de este tipo? (1)

La función id tiene este tipo:

id :: a -> a

Obtiene una instancia de este tipo, cuando reemplaza a por a -> b :

id :: (a -> b) -> (a -> b)

que, debido al currying, es lo mismo que:

id :: (a -> b) -> a -> b

Ahora aplique flip a esto y obtendrá:

flip id :: a -> (a -> b) -> b

En el caso de id (+) la instancia es:

id :: (Num a) => (a -> a) -> (a -> a)

Ahora la flip id invertida te da:

flip id :: (Num a) => a -> (a -> a) -> a

Nota al margen: Esto también le muestra cómo ($) es lo mismo que id , solo que con un tipo más restringido:

($) :: (a -> b) -> a -> b ($) f x = f x -- unpoint: ($) f = f -- hence: ($) = id

Tengo curiosidad acerca de la expresión flip id (No es tarea: lo encontré en la documentación de getOpt ).

Me pregunto por qué tiene este tipo:

Prelude> :t (flip id) (flip id) :: b -> (b -> c) -> c

Por ejemplo, (flip id) 5 (+6) da 11 .

Sé por qué id (+6) 5 da 11, pero no "entiendo" el flip id del flip id .

Traté de resolver esto usando lápiz y papel, pero no pude. ¿Alguien podría explicarme esto? Quiero decir, ¿cómo puede tener el tipo b -> (b -> c) -> c ?