Restricciones múltiples

¿Ahora que pasa si tenemos más de un parámetro, y no todos los parámetros pertenecen a la misma clase de tipo? ¡Utilizamos varias variables de tipo!

funcionLoca :: (Ord a, Show b) => a -> a -> b -> Bool
funcionLoca x y z = x > y || show z == "hola"

Y esto se lee así: los parámetros de tipo a tienen que ser Ord, mientras que los de tipo b tienen que ser Show.

¡Veamos si se entiende! Explicitá el tipo de las funciones estaEntre y sonIgualesOEstaEntre en el editor.

¡Dame una pista!

Podríamos pensar que estaEntre nos sirve para saber si un número está entre otros dos.

  estaEntre 4 5 6
False
  estaEntre 4 1 10
True

Pero queremos pensarla de forma más genérica: ¡hagamos que nos sirva para cualquier cosa ordenable (Ord)! Por ejemplo, para caracteres:

  estaEntre 'h' 'a' 'z'
True

Mirá qué hace sonIgualesOEstaEntre, y vas a notar que podríamos escribir cosas como estas...

 `sonIgualesOEstaEntre` 'h' 'h' 3 4 5
True
 `sonIgualesOEstaEntre` 5 6 'b' 'c' 'f'
False

...porque los dos primeros parámetros tienen que ser del mismo tipo, ¡pero no necesariamente del mismo que los otros tres!

Tenés que iniciar sesión antes de empezar a enviar tus soluciones