Les suivants contrôles de type de programme si je précise sur la ligne de commande (par exemple ghci file.hs
):ghci - compilation impatiente en mode interactif?
import Data.Ratio
foo = let x = [1..]
y = (1%2) + (head x)
in y
Cependant, si je saisis de manière interactive, je vais une erreur de type:
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'
Il semble que x
est avidement typé comme [Integer]
par opposition au plus général (Num t, Enum t) => [t]
.
Y at-il quelque chose que je peux faire à ce sujet? Existe-t-il d'autres situations dans lesquelles le mode interactif diffère du mode par lots?
restriction de monomorphisme ... – augustss
et tapez défaut – Ptival
, il est en effet la restriction de monomorphisme redoutée. Il y a deux façons de le contourner: donner une signature explicite ou désactiver cette restriction (dans GHCi, vous pouvez faire ': set -XNoMonomorphismRestriction' et vous avez terminé, les pragmas de langage et les drapeaux de compilation fonctionnent aussi). – Vitus