Esto probablemente no sea posible, ya que ya revisé la lista de todas las extensiones de GHC y esto no está allí, pero pensé que lo haría por si acaso.En Haskell puedo hacer literales numéricos no polimórficos por defecto?
¿Hay alguna manera de hacerlo de modo que 2
tiene tipo Int
(o Integer
) en lugar de la habitual Num a => a
?
(La razón por la que me gustaría este comportamiento es que hace que los mensajes de error sean más claros y que la inferencia sea más probable (especialmente con las clases de tipo). Siempre pude escribir (2 :: Int) en todas partes, pero más bien, el comportamiento "más seguro" es el menos explícito)
sí, no lo hagas :) la inferencia tipo generalmente no es tan mala. ¿tal vez si publica un problema de ejemplo, las personas pueden ayudarlo a solucionarlo de otra manera? puede establecer los valores predeterminados a través de http://www.haskell.org/tutorial/numbers.html. también puede desarrollar prototipando los tipos de funciones de nivel superior fijándolos en 'f = undefined :: DesiredType', y eliminarlos adecuadamente. – gatoatigrado
Las constantes polimórficas no me impiden hacer nada, pero sí hacen que los mensajes de error sean menos directos, por lo general cambian "no podría coincidir con el tipo esperado ..." a un "sin instancia para ...". Los valores predeterminados no suelen permitir deducir una instancia para una clase (y se siente como un hack) – Owen