monads do not fit together?

The program belows reads the get fields 'un' and 'ip'. If these get fields both exist, the program modifies a firewall script. The problem is in cgiMain. The error at the problem line is: parse error on input `<-' If I move the line above the 'if' I get: Couldn't match expected type `CGIT IO t0' with actual type `IO [String]'. How can I extract values from the IO [String] monad in cgiMain? I don't want to alter the type of runRefreshFirewall. Kees module Main( main ) where import Network.CGI import Text.XHtml import Text.XHtml.Transitional import Data.Maybe runRefreshFirewall :: String -> String -> IO [String] runRefreshFirewall un ip = do return ["test" ] inputCgiOkPage :: String -> String -> [String] -> Html inputCgiOkPage un ip msgs = body << h1 << ("IP: " ++ (show ip)) undefinedFieldsPage :: Html undefinedFieldsPage = body << h1 << "Undefined Fields" cgiMain :: CGI CGIResult cgiMain = do maybeUn <- getInput "un" maybeIp <- getInput "ip" if ((isJust maybeUn) && (isJust maybeIp)) then msgs <-runRefreshFirewall (fromJust maybeUn) (fromJust maybeIp) -- problem output $ renderHtml $ inputCgiOkPage (fromJust maybeUn) (fromJust maybeIp) msgs else output $ renderHtml undefinedFieldsPage main :: IO () main = runCGI $ handleErrors cgiMain
participants (1)
-
Kees Bleijenberg