Gibt es eine traditionelle Möglichkeit, eine Funktion, die IO verwendet, zuzuordnen? Insbesondere möchte ich eine Funktion zuordnen, die einen zufälligen Wert zurückgibt. Die Verwendung einer normalen Map führt zu einer Ausgabe vom Typ ([IO b]), aber um die Werte in der Liste von IO zu entpacken, brauche ich etwas vom Typ (IO [b]). Also schrieb ich ...Mapping über IO in Haskell
mapIO :: (a -> IO b) -> [a] -> [b] -> IO [b]
mapIO f [] acc = do return acc
mapIO f (x:xs) acc = do
new <- f x
mapIO f xs (new:acc)
... was gut funktioniert. Aber es scheint, dass es eine Lösung dafür in Haskell eingebaut geben sollte. Zum Beispiel kann ein Beispielfall verwenden:
getPercent :: Int -> IO Bool
getPercent x = do
y <- getStdRandom (randomR (1,100))
return $ y < x
mapIO (\f -> getPercent 50) [0..10] []
Probieren Sie in Zukunft [Hoogle] (http://haskell.org/hoogle/?hoogle= (a + -% 3E + IO + b \) + -% 3E + \ [a \] + -% 3E + IO + \ [b \]), um herauszufinden, ob eine scheinbar offensichtliche Funktion bereits existiert (weil sie es normalerweise tut). Es ist unglaublich nützlich! –
Danke, das sieht nach einer tollen Ressource aus! – unignorant
Schauen Sie sich auch Hayoo an - es ist wie Hoogle, aber die Dinge werden etwas anders überprüft. – BMeph