el tipo de programa siguientes comprueba si puedo especificar en la línea de comandos (por ejemplo ghci file.hs
):ghci - compilación ansiosa en modo interactivo?
import Data.Ratio
foo = let x = [1..]
y = (1%2) + (head x)
in y
Sin embargo, si entro de forma interactiva Voy a buscar un error de tipo:
Prelude> import Data.Ratio
Prelude Data.Ratio> let x = [1..]
Prelude Data.Ratio> let y = (1%2) + (head x)
<interactive>:1:23:
Couldn't match expected type `Ratio a0' with actual type `Integer'
Se parece que x
se está escribiendo ansiosamente como [Integer]
en comparación con el (Num t, Enum t) => [t]
más general.
¿Hay algo que pueda hacer al respecto? ¿Hay otras situaciones en las que el modo interactivo difiera del modo por lotes?
monomorphism restricción ... – augustss
y escriba el impago – Ptival
De hecho, es la restricción monomorphism temida. Hay dos formas de evitarlo: dar firma explícita o desactivar esta restricción (en GHCi, puede hacer ': set -XNoMonomorphismRestriction' y ya está; los pragmas de idioma y los indicadores de compilación también funcionan). – Vitus