KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm attempting to use HSlogger to get some information about my program. So I add the following line to my function import Data.Word import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import Data.Bits import Data.Int import Data.ByteString.Parser import System.Log.Logger import System.Log.Handler.Syslog importFile :: FilePath -> IO (Either String (PESFile )) importFile n = do warningM "MyApp.Component2" "Something Bad is about to happen." ... And that works fine, because the function is inside IO. However when I add a similar line to the following function: ... parsePES :: Parser PESFile parsePES = do header <- string "#PES" warningM "parsing header" ... return (PESFile ...) I get a type error: Couldn't match expected type `Parser a0' with actual type `String -> IO ()' In the return type of a call of `warningM' In a stmt of a 'do' expression: warningM "parsing header" In the expression: do { header <- string "#PES"; warningM "parsing header"; ... And I totally understand why - parsePES is in the Parser monad, not the IO monad. What I don't understand is what to do about it. Do I need a monad transformer so I can stack the Parser monad and the IO monad together? How do I go about that?
Tags (comma-separated)
Save Edits
Cancel