Come applicare due funzioni sulla stessa stringa senza usare “>>”
Domanda
Sto scrivendo una funzione come questa.
func :: IO()
func = putStr print "func = putStr print"
Lo so che non è corretta ma l'idea è che voglio il putStr
applicato sulla stringa poi print
applicato sulla stessa "fun = .."
stringa in modo che l'output potrebbe essere:
func = putStr print "func = putStr print"
che è lo stesso che la mia definizione di funzione. Grazie
Soluzione
Se il vostro obiettivo è quello di scrivere un Quine (Un altro esempio dato Haskell in questo articolo anche), è possibile utilizzare la notazione lambda per la cattura variabile.
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
Altri suggerimenti
Non sono sicuro di dove si sta andando con la parte "senza utilizzare >>
" (se questo è davvero il do
notazione utilizzo punto), ma si può facilmente scrivere una funzione di supporto che si applica due funzioni in sequenza allo stesso ingresso :
tee f g s = f s >> g s
func = tee putStr print "..."
Inoltre, per evitare di ripetere solo la stringa, una variabile locale con let
o where
sarebbe probabilmente la più semplice:
let s = "..."
in putStr s >> print s
Si potrebbe fare in questo modo:
doActions str actions = mapM_ ($ str) actions