[Haskell-cafe] Can not use ST monad with polymorphic function
Dmitry Kulagin
dmitry.kulagin at gmail.com
Wed Nov 28 18:52:30 CET 2012
Hi Cafe,
I try to implement some sort of monadic fold, where traversing is
polymorphic over monad type.
The problem is that the code below does not compile. It works with any
monad except for ST.
I suspect that monomorphism is at work here, but it is unclear for me how
to change the code to make it work with ST.
fold :: Monad m => (Int -> m ()) -> m ()
fold f = mapM_ f [0..20]
selectFold :: Monad m => String -> IO ((Int -> m ()) -> m ())
selectFold method = do
-- in real program I'd like to choose between
-- different fold methods, based on some IO context
return fold
useFold :: Monad m => ((Int -> m ()) -> m ()) -> m ()
useFold fold' = fold' f
where f _ = return () -- some trivial iterator
main = do
fold'' <- selectFold "some-method-id"
print $ runST $ useFold fold''
Thank you!
Dmitry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20121128/4fc07b3b/attachment.htm>
More information about the Haskell-Cafe
mailing list