You are suggesting later in this thread that the old ListT could be used to solve my initial problem. I don't see how, so I'm wondering if you'd mind sorting some things out for me?
On Tue, Jan 23, 2007 at 11:59:58 +0200, Yitzchak Gale wrote:
[..]
>test = do
> a <- liftIO getChar
> guard $ a /= 'q'
> return $ a `mplus` test
This piece has type problems. I couldn't get ghci to accept it without
making some changes:
test :: ListT IO Char
test = do
a <- liftIO getChar
guard $ a /= 'q'
(return a) `mplus` test
[..]
>test2 = runListT . mapM (liftIO print)
There are some type problems here too, and I don't really see how to fix
them.
> :t liftIO
liftIO :: (MonadIO m) => IO a -> m a
> :t print
print :: (Show a) => a -> IO ()
> :t (liftIO print)
Couldn't match expected type `IO a'
against inferred type `a1 -> IO ()'
In the first argument of `liftIO', namely `print'
I also don't quite see how 'mapM foo` can be applied to a ListT since
'mapM foo' would have the type [a] -> m [b] (a & b depending on foo).
Perhaps you didn't mean mapM but rather mapListT?
But using mapListT in a similar way:
> runListT.mapListT (\ m -> m >>= mapM putChar) $ test
does not result in the desired interleaving. Changing to using runListT
first also gives the wrong behaviour:
> runListT test >>= mapM_ putChar
I am really confused about your statement that ListT as found in GHC 6.6
can be used to solve my problem. I'd like to avoid using
unsafeInterleaveIO if there's a nice solution for it. IMHO a solution
with ListT would be nice, so I'd really like to understand how to make
it work the way I want it.
/M
--
Magnus Therning (OpenPGP: 0xAB4DFBA4)
[EMAIL PROTECTED] Jabber: [EMAIL PROTECTED]
http://therning.org/magnus
pgp8hV5I4iCJ8.pgp
Description: PGP signature
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
