functA :: (Monad m, Num a) => a -> a -> m a functA a b = pure (a * b) functB :: (Monad m, Num a) => a -> a -> m a functB a b = pure (a + b) bindfuncts :: IO Int bindfuncts = do let var1 = 2 let var2 = 5 let var3 = 100 functA var1 var2 >>= \x -> functB x var3 main = do result <- bindfuncts print result