sucesos son que negro los horizonte hay gusano gravedad fuerza forma espacio dentro cual como blanco atraccion agujeros agujero haskell types ghc

haskell - son - que hay dentro de un agujero negro



¿Hay alguna manera de hacer que GHC proporcione las restricciones de clase de tipo de agujeros tipados? (2)

Comportamiento actual

Prelude> show _ <interactive>:7:6: Found hole ‘_’ with type: a0 Where: ‘a0’ is an ambiguous type variable Relevant bindings include it :: String (bound at <interactive>:7:1) In the first argument of ‘show’, namely ‘_’ In the expression: show _ In an equation for ‘it’: it = show _

Comportamiento deseado

Sería bueno si GHC también me dijera que el agujero mecanografiado tiene la restricción Show clase de tipo.

Misc

Versión GHC 7.8.1


Esto ahora está arreglado en GHC 8.0 gracias al ghc.haskell.org/trac/ghc/ticket/9479 @ DominiqueDevriese.

Debido al incumplimiento de tipo extendido , esto no es inmediatamente obvio en GHCi. Con tu ejemplo,

> show _ <interactive>:7:6: error: • Found hole: _h :: () Or perhaps ‘_h’ is mis-spelled, or not in scope • In the first argument of ‘show’, namely ‘_h’ In the expression: show _h In an equation for ‘it’: it = show _h • Relevant bindings include it :: String (bound at <interactive>:7:1)

el tipo de agujero está predeterminado en () . Este es aparentemente el comportamiento deseado , aunque hay un argumento que se debe hacer para que el incumplimiento extendido no se aplique a los agujeros (ya que un uso común para ellos es hacer que el compilador le diga el tipo inferido).

Sin embargo, si compila con GHC o deshabilita las reglas predeterminadas extendidas en GHCi (a través de :set -XNoExtendedDefaultRules ), vemos el resultado de las mejoras:

<interactive>:3:1: error: • Ambiguous type variable ‘a0’ arising from a use of ‘show’ prevents the constraint ‘(Show a0)’ from being solved. Probable fix: use a type annotation to specify what ‘a0’ should be. These potential instances exist: instance Show Ordering -- Defined in ‘GHC.Show’ instance Show Integer -- Defined in ‘GHC.Show’ instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’ ...plus 22 others ...plus 11 instances involving out-of-scope types (use -fprint-potential-instances to see them all) • In the expression: show _ In an equation for ‘it’: it = show _ <interactive>:3:6: error: • Found hole: _ :: a0 Where: ‘a0’ is an ambiguous type variable • In the first argument of ‘show’, namely ‘_’ In the expression: show _ In an equation for ‘it’: it = show _ • Relevant bindings include it :: String (bound at <interactive>:3:1)


No, actualmente no es posible. Pero se puede agregar a GHC según las especulaciones.