
On 05/03/14 14:31, Mateusz Kowalczyk wrote:
On 05/03/14 13:53, Nathan Hüsken wrote:
Hey,
I have a function
|func1 :: IO String |
and another:
|func2 :: String -> Either String String |
and I want to combine them, giving the output of the first as the input as the second.
|func3 :: IO (Either String String) func3 = do tmp <- func1 return (func2 tmp) |
This is just ‘fmap func2 func1’ or using the operator, ‘func2 <$> func1’.
Ok, possible. But I rather would like a result of type "EitherT String IO String". So how can I combine these function in a smart way, to get the needed result?
After using ‘func2 <$> func1’ we have ‘IO (Either String String)’ as you point out. The ‘EitherT’ constructor has type ‘m (Either e a)’.
Oops, that meant to say that it takes a sole argument of that type.
Here if m = IO, e = String, a = String so we have exactly what we need:
:t EitherT $ func2 <$> func1 EitherT $ func2 <$> func1 :: EitherT String IO String
Thanks! Nathan
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Mateusz K.