Re: [Haskell-cafe] cgi liftM liftIO
I think you need to put liftIO in front of the IO actions you want to do inside the CGI Monad. Like in this example http://www.haskell.org/haskellwiki/ Practical_web_programming_in_Haskell#File_uploads (Why did I need to use google to find that? The wiki search in awful. Searching for CGI returns nothing, whereas with google the above is the first hit.) Am 13.06.2008 um 15:41 schrieb Cetin Sert: Hi, Could someone please care to explain what I am doing wrong below in cgiMain2 and how can I fix it? ./Main.hs:25:15: No instance for (MonadCGI IO) arising from a use of `output' at ./Main.hs:25:15-20 Possible fix: add an instance declaration for (MonadCGI IO) In the first argument of `($)', namely `output' In the expression: output $ renderHtml $ page import fileForm In the definition of `upload': upload = output $ renderHtml $ page import fileForm ./Main.hs:57:29: Couldn't match expected type `CGI CGIResult' against inferred type `IO CGIResult' In the first argument of `handleErrors', namely `cgiMain2' In the second argument of `($)', namely `handleErrors cgiMain2' In the expression: runCGI $ handleErrors cgiMain2 import IO import Network.CGI import Text.XHtml import qualified Data.ByteString.Lazy as BS import Control.Monad (liftM) import Data.Maybe (fromJust) import Interact fileForm = form ! [method post, enctype multipart/form-data] [afile file, submit Upload] page t b = header thetitle t +++ body b cgiMain1 = do getInputFPS file ↠ λms → maybe upload contents ms ↠ return where upload = output $ renderHtml $ page import fileForm contents = outputFPS cgiMain2 = do getInputFPS file ↠ λms → maybe upload contents ms ↠ return where upload = output $ renderHtml $ page import fileForm contents = λs → do (i,o,h,_) ← runUnzip BS.hPutStr i s c ← BS.hGetContents o outputFPS c {- (i,o,h,_) ← runUnzip BS.hPutStr i s BS.hGetContents o ↠ outputFPS -} {- liftM :: (Monad m) = (a1 - r) - m a1 - m r liftIO :: (MonadIO m) = IO a - m a saveFile n = do cont - liftM fromJust $ getInputFPS file let f = uploadDir ++ / ++ basename n liftIO $ BS.writeFile f cont return $ paragraph (Saved as +++ anchor ! [href f] f +++ .) -} runUnzip = runInteractiveCommand unzip -l /dev/stdin main = runCGI $ handleErrors cgiMain2 Best Regards, Cetin Sert P/s: what are lifts o_O? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe PGP.sig Description: Signierter Teil der Nachricht ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
Re: [Haskell-cafe] cgi liftM liftIO
On 2008.06.14 08:05:48 +0200, Adrian Neumann [EMAIL PROTECTED] scribbled 4.0K characters: I think you need to put liftIO in front of the IO actions you want to do inside the CGI Monad. Like in this example http://www.haskell.org/haskellwiki/ Practical_web_programming_in_Haskell#File_uploads (Why did I need to use google to find that? The wiki search in awful. Searching for CGI returns nothing, whereas with google the above is the first hit.) IIRC, MediaWiki search will not search for anything shorter than 4 characters (as an optimization, I think). This is admittedly annoying when you are searching not for 'the' but 'IRC' or 'CGI'... -- gwern William Gap subversives Lexis-Nexis SADMS Blowpipe GRU Posse ISCS mailbomb signature.asc Description: Digital signature ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
[Haskell-cafe] cgi liftM liftIO
Hi, Could someone please care to explain what I am doing wrong below in cgiMain2 and how can I fix it? ./Main.hs:25:15: No instance for (MonadCGI IO) arising from a use of `output' at ./Main.hs:25:15-20 Possible fix: add an instance declaration for (MonadCGI IO) In the first argument of `($)', namely `output' In the expression: output $ renderHtml $ page import fileForm In the definition of `upload': upload = output $ renderHtml $ page import fileForm ./Main.hs:57:29: Couldn't match expected type `CGI CGIResult' against inferred type `IO CGIResult' In the first argument of `handleErrors', namely `cgiMain2' In the second argument of `($)', namely `handleErrors cgiMain2' In the expression: runCGI $ handleErrors cgiMain2 import IO import Network.CGI import Text.XHtml import qualified Data.ByteString.Lazy as BS import Control.Monad (liftM) import Data.Maybe (fromJust) import Interact fileForm = form ! [method post, enctype multipart/form-data] [afile file, submit Upload] page t b = header thetitle t +++ body b cgiMain1 = do getInputFPS file ↠ λms → maybe upload contents ms ↠ return where upload = output $ renderHtml $ page import fileForm contents = outputFPS cgiMain2 = do getInputFPS file ↠ λms → maybe upload contents ms ↠ return where upload = output $ renderHtml $ page import fileForm contents = λs → do (i,o,h,_) ← runUnzip BS.hPutStr i s c ← BS.hGetContents o outputFPS c {- (i,o,h,_) ← runUnzip BS.hPutStr i s BS.hGetContents o ↠ outputFPS -} {- liftM :: (Monad m) = (a1 - r) - m a1 - m r liftIO :: (MonadIO m) = IO a - m a saveFile n = do cont - liftM fromJust $ getInputFPS file let f = uploadDir ++ / ++ basename n liftIO $ BS.writeFile f cont return $ paragraph (Saved as +++ anchor ! [href f] f +++ .) -} runUnzip = runInteractiveCommand unzip -l /dev/stdin main = runCGI $ handleErrors cgiMain2 Best Regards, Cetin Sert P/s: what are lifts o_O? ___ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe