J'essaie d'utiliser des flèches et je suis confronté à un problème ennuyeux - je dois fournir des types explicites pour toutes les fonctions que j'ai implémentées. Si je fournis pas les sorties GHC une erreur commeInférence de type dans haskell et flèches
No instance for (Arrow a0) arising from a use of ‘...’
The type variable ‘a0’ is ambiguous
Je peux fournir des types explicites, mais il est très ennuyeux, car chaque fois que je change une fonction, il est possible que je dois modifier manuellement les types de chaque fonction dépendait modifié.
Est-il possible de forcer ghc à déduire automatiquement les types de fonctions?
Trivial cas
import Control.Arrow
ss = arr
provoque
No instance for (Arrow a0) arising from a use of ‘arr’
The type variable ‘a0’ is ambiguous
Relevant bindings include
ss :: (b -> c) -> a0 b c (bound at src/Main.hs:62:1)
Note: there are several potential instances:
instance Arrow Coroutine -- Defined at src/Main.hs:33:10
instance Arrow (->) -- Defined in ‘Control.Arrow’
instance Monad m => Arrow (Kleisli m) -- Defined in ‘Control.Arrow’
In the expression: arr
In an equation for ‘ss’: ss = arr
alors que le code avec exactement la même sémantique
import Control.Arrow
ss :: forall a b c. (Arrow a) => (b -> c) -> a b c
ss = arr
compile assez bien.
Je suis sûr que cela doit être un doublon, mais je n'ai pas encore trouvé d'autre question qui a une erreur de type ambigu à partir de la restriction de monomorphisme. –