Como aplicar duas funções na mesma string sem usar “>>”
Pergunta
Estou escrevendo uma função como esta.
func :: IO()
func = putStr print "func = putStr print"
Eu sei que está incorreto, mas a ideia é que eu quero o putStr
aplicado na corda então print
aplicado na mesma string "fun = .."
para que a saída fosse:
func = putStr print "func = putStr print"
que é igual à minha definição de função.Obrigado
Solução
Se o seu objetivo é escrever um quine (Outro exemplo de Haskell fornecido neste artigo também), você pode usar a notação lambda para captura de variáveis.
func = (\x -> putStr x >> print x) "func = (\\x -> putStr x >> print x) "
Outras dicas
Não tenho certeza de onde você está indo com o "sem usar >>
"Parte (se esse é realmente o ponto de uso do
-Notação), mas você pode escrever facilmente uma função auxiliar que aplica duas funções em sequência à mesma entrada:
tee f g s = f s >> g s
func = tee putStr print "..."
Além disso, para evitar repetir a corda, uma variável local com let
ou where
provavelmente seria o mais fácil:
let s = "..."
in putStr s >> print s
Você poderia fazer assim:
doActions str actions = mapM_ ($ str) actions