Je suis juste jouer avec Haskell monades et je continue à obtenir une erreur que je ne peux pas sembler corriger. Mon segment de code utilise l'état Monad pour ajouter les deux premiers caractères d'une chaîne ensemble et les renvoyer dans le cadre de l'état. Ma ligne "put" continue à me donner l'erreur:continue à recevoir (Utilisez FlexibleContexts pour permettre cette) Erreur dans la fonction simple Haskell
* Non type-variable argument in the constraint: MonadState [a] m
(Use FlexibleContexts to permit this)
* When checking the inferred type
testH :: forall (m :: * -> *) a. MonadState [a] m => [a] -> m [a]
Comment puis-je résoudre ce problème? L'extension de la langue n'est pas une option, je veux juste savoir comment je peux changer mon code pour faire fonctionner
test xs =
runState (testH (tail xs)) ((head xs):[])
testH xs =
do
a <- get
put ((head xs):a)
b <- get
return b
Importez-vous 'Control.Monad.State'? Si c'est le cas, essayez plutôt d'importer 'Control.Monad.Trans.State'. – Alec
Je ne suis pas entièrement sûr de savoir ce que vous entendez par "L'extension de la langue n'est pas une option". Si vous ne faites que jouer avec des monades, pourquoi ne pas ajouter '{- # LANGUAGE FlexibleContexts # -}' en haut de votre code? – Lazersmoke
"L'extension de la langue n'est pas une option", sauf que vous utilisez 'MultiParamTypeClasses' simplement en ayant MonadState' dans la portée et que vous avez donc déjà étendu la langue. –