marco_iku Posted December 22, 2009 at 04:14 PM Report Share #301842 Posted December 22, 2009 at 04:14 PM Boa tarde Quero abrir um ficheiro para retirar o seu conteúdo e trabalhar com este. lerFile :: IO (String) lerFile = do putStrLn "Localizacao do ficheiro:" local <- getLine h <- openFile local ReadMode textoFicheiro <- hGetContents h return textoFicheiro O problema é que quando quero utilizar esta função para trabalhar com conteudo do ficheiro (textoFicheiro) dá-me sempre erro por causa dos tipos. Isto criar uma variável do tipo IO String e eu preciso de uma do tipo String. Obrigado Link to comment Share on other sites More sharing options...
Baderous Posted December 22, 2009 at 05:46 PM Report Share #301864 Posted December 22, 2009 at 05:46 PM A única forma de extrair (correctamente) o conteúdo de um Monad é utilizando o operador bind '>>=' ou a notação 'do' que faz o mesmo de uma forma mais legível. Link to comment Share on other sites More sharing options...
marco_iku Posted December 22, 2009 at 06:03 PM Author Report Share #301866 Posted December 22, 2009 at 06:03 PM podes mostrar um exemplo? Link to comment Share on other sites More sharing options...
Baderous Posted December 22, 2009 at 06:07 PM Report Share #301867 Posted December 22, 2009 at 06:07 PM Já o fizeste na tua função. getLine :: IO String local :: String Ao utilizares o do para trabalhares com Monads, o operador <- extrai do Monad que se encontra à sua direita o seu conteúdo e armazena-o na variável que está à sua esquerda. Com o bind seria: getLine >>= (\local -> ...) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now