3 votes

Carte sur IO [Int] dans GHCI

J'aimerais savoir comment faire pour recouvrir une IO [Int] dans la GHCI.

: :{
| th :: IO [Int]
| th = pure [1, 2, 3, 4]
| :}
: th
[1,2,3,4]
: :t th
th :: IO [Int]
: map (+2) th
    • Couldn't match expected type ‘[b]’ with actual type ‘IO [Int]’
    • In the second argument of ‘map’, namely ‘th’
      In the expression: map (+ 2) th

Résultat souhaité :

: res = map (+2) th -- <-- some working version of this
: res
[3, 4, 5, 6]
: :t res
res :: IO [Int]

La solution est probablement très évidente, mais je n'arrive pas à m'y retrouver.

6voto

CommuSoft Points 6439

Vous pouvez utiliser fmap :: Functor f => (a -> b) -> f a -> f b à l'exécution d'un mappage sur les valeurs d'un Functor . Puisque IO est un foncteur, vous pouvez donc l'utiliser pour post-traitement le résultat d'un IO action :

Prelude> fmap (map (+2)) th
[3,4,5,6]

Vous pouvez également utiliser l'opérateur infixe (<$>) :: Functor f => (a -> b) -> f a -> f b qui est un alias :

Prelude> map (+2) <$> th
[3,4,5,6]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X