Come si stampa l'output di una funzione che restituisce una stringa IO allo stdout? Non sono in grado di utilizzare lo spettacolo o la stampa.Scrittura di una stringa IO su stdout in Haskell
risposta
Se si desidera stampare il risultato della funzione foo :: Int -> IO String
(per esempio), si può fare
main = do
str <- foo 12
putStrLn str
o senza il fai-notazione
main = foo 12 >>= putStrLn.
Il fai-notazione è zucchero sintattico per il secondo, che utilizza il fondamentale combinatore (>>=)
, che ha il tipo
(>>=) :: Monad m => m a -> (a -> m b) -> m b
IO
è un'istanza della classe Monad
, quindi è possibile utilizzarla qui.
foo :: Int -> IO String
foo 12 :: IO String
putStrLn :: String -> IO()
(foo 12) >>= putStrLn :: IO()
Come si fa a stampare l'output di una funzione che restituisce una stringa IO al stdout?
Bene, vediamo. Ecco una funzione che restituisce una stringa IO: (! Ma una funzione comunque)
dumbFunction :: a -> IO String
dumbFunction x = getLine
dumbFunction
è una funzione muto. Ignora il suo input e quindi restituisce getLine
, che ha il tipo IO String
.
Quindi mi dici, come si stampa getLine :: IO String
? La risposta è che non lo fai! Questo è ciò che chiamiamo "azione IO". Si noti che un'azione IO è non una funzione, perché fa non prendere input. (Tuttavia, le azioni IO potrebbero acquisire input da, beh, le operazioni di IO come la lettura stdin, come getLine
fa. Ma non è considerata una "funzione", perché non accetta alcun input tradizionale)
Così, invece di stampare l'azione stessa, probabilmente si desidera eseguire l'azione e quindi stampare il risultato. Questo può essere fatto come descritto da Daniel Fischer (con <-
, che può essere considerato come l'operatore "run").
- 1. Mappatura su IO in Haskell
- 2. "Lazy IO" in Haskell?
- 3. stdout dinamica in Haskell
- 4. Acquisizione/dirottamento stdout in haskell
- 5. uscita Integer stdout in Haskell
- 6. Eccezioni IO estensibili Haskell?
- 7. Haskell: Trapped in IO monad
- 8. Haskell monade: IO [Doppia] a [IO Doppia]
- 9. Haskell IO - maniglia chiusa
- 10. Stream Haskell con effetti IO
- 11. Scrittura di stream node.js in una variabile di stringa
- 12. Erlang leggere stdout stdin scrittura
- 13. StringScanner scansione IO invece di una stringa
- 14. Converti [IO Int] in IO [Int] in Haskell?
- 15. File Linux IO - Prestazioni di multithreading - scrittura su file diversi
- 16. Una funzione Haskell di tipo: IO String-> String
- 17. Reindirizzamento stdout a una stringa in Java
- 18. leggere da scrittura stdin stdout in C
- 19. Haskell: System.Process unire stdout e stderr
- 20. Haskell e azioni IO di basso livello
- 21. Haskell ReaderT Env IO boilerplate
- 22. Node.js: Scrittura di una funzione per restituire stdout spawn come stringa
- 23. Haskell: cattura di basso livello IO eccezioni
- 24. Questa è una visione ragionevole di Haskell IO?
- 25. stringa di scrittura Python direttamente su tarfile
- 26. Scrittura di una stringa a una cella in Excel
- 27. Scrittura della stringa sul flusso di output
- 28. Matrice ciclica di lettura e scrittura MPI IO
- 29. wrapper C/C++ per Haskell IO monad
- 30. Come posso convertire un oggetto IO in una stringa in Ruby?