tuplas sobre simbolos pattern opciones hacer funciones ejemplos como ciclos basico haskell types ghci function-declaration

haskell - sobre - ¿Cómo proporcionar declaraciones explícitas de tipo para las funciones cuando se usa GHCi?



if en haskell ejemplos (2)

¿Cómo puedo definir el equivalente de esta función (tomada de learnyouahaskell ) dentro de GHCi?

import Data.List numUniques :: (Eq a) => [a] -> Int numUniques = length . nub

Sin la declaración de tipo, GHCi acepta la definición de la función, pero termina con un tipo inútil:

Prelude Data.List> import Data.List Prelude Data.List> let numUniques'' = length . nub Prelude Data.List> :t numUniques'' numUniques'' :: [()] -> Int

La función resultante solo acepta una lista de unidades como parámetro.

¿Hay alguna manera de proporcionar declaraciones de tipo en GHCi? ¿O hay otra manera de definir funciones como estas que no requieren declaraciones de tipo?

No vi pistas obvias en la guía de GHCi, y experimenté con expresiones como la siguiente (en vano):

> let numUniques'' = ((length . nub) :: (Eq a) => [a] -> Int) > :t numUniques'' numUniques'' :: [()] -> Int


¿Hay alguna manera de proporcionar declaraciones de tipo en GHCi?

let numUniques'' :: (Eq a) => [a] -> Int; numUniques'' = length . nub

¿O hay otra manera de definir funciones como estas que no requieren declaraciones de tipo?

Si desactiva la restricción de monomorfismo con -XNoMonomorphismRestriction , -XNoMonomorphismRestriction el tipo correcto.


Tenga en cuenta que también puede evitar la restricción de monomorfismo simplemente agregando "puntos" (es decir, variables explícitas) a su expresión. Entonces esto también da el tipo correcto:

let numUniques x = longitud. nub $ x