
Thanks!
This is what I had in mind, except that I'm new too Haskell so I tried
English instead of code for expressing it :-)
I'll also check the IOSpec package Paul suggested,
On Mon, Mar 16, 2015 at 7:40 AM, Sumit Sahrawat, Maths & Computing, IIT
(BHU)
On 16 March 2015 at 19:51, Maurizio Vitale
wrote: suppose I have a restricted IO monad, RIO that only exposes readFile. and then I have a monad SIO that will eventually provide a virtual file system from a map path->content, also with a readFile function returning SIO(String).
What is the way to write a function parseFile that can operate in both monads so that I can use SIO for testing? should I define a third monad CompileMonad that has instances for both RIO and SIO and then having parseFile :: CompileMonad ast?
You might be able to do something like,
class MonadIO m => ProvidesReadFile m where readFile :: FilePath -> m String
instance ProvidesReadFile RIO where readFile = readFileRIO -- the RIO specific readFile
instance ProvidesReadFile SIO where readFile = readFileSIO -- the SIO specific readFile
parseFile :: ProvidesReadFile m => FilePath -> m ast parseFile = do f <- readFile let ast = parse f -- the pure parser return ast -- works for both monads
Thanks,
Maurizio
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
This is more suitable for the haskell-cafe. I am posting it there so that more people might comment on it. HTH.
-- Regards
Sumit Sahrawat
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners