[Haskell-beginners] testing IO code
Sumit Sahrawat, Maths & Computing, IIT (BHU)
sumit.sahrawat.apm13 at iitbhu.ac.in
Mon Mar 16 14:40:35 UTC 2015
On 16 March 2015 at 19:51, Maurizio Vitale <mrz.vtl at gmail.com> 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 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150316/9545df39/attachment.html>
More information about the Beginners
mailing list