Portál AbcLinuxu, 8. května 2025 02:24
Pěkný podvečer přeju.
Vsadím se, že to bude maličkost, ale nejsem schopen rozchodit něco ve smyslu následujícího výpisu:
#!/usr/bin/runghc
module Main where
import Network.CGI
main = do
putStrLn "Content-Type: text/html\n"
sn <- serverName -- na těchhle dvou řádcích
putStrLn sn -- je naznačen problematický kód
Po celodenním hledání mám tak akorát intuitivní představu o problému: míchají se tam různé typy monád(?). Nejbližší co jsem našel je tohle, ale – jistě nemusím vysvětlovat, že jsem s Haskellem sotva začal – pro mě zatím celkem alchymie.
Dík za každou reakci.
PS: GHC v6.6.1 + Apache na Gentoo
Řešení dotazu:
sn <- serverName
? Proč serverName
nemůže být přímo součástí putStrLn
?
To jsem samozř. zkoušel jako první, jenže serverName
je typu
serverName :: (MonadCGI m) => m String
a konstrukcí <-
by právě mělo – jestli to dobře chápu – jakoby dojít k extrakci toho stringu… ale asi ne tak úplně, protože to stejně zařve.
Zdravim,
asi pozde, ale prece :) serverName volate v IO monade, je nutne to volat v CGI.
Tady wiki.haskell.cz/knihovny:fastcgi nebo tady blog.haskell.cz/jh/haskell-a-ruby-on-rails-i/ je priklad (ackoli ne uplne stejny, pouziva se fastCGI).
Cili v main zavolat "runCGI f" a ve funkci f pak muzete smele volat serverName. Ovsem zase vam tam nepujde putStrLn pouzit primo, bude potreba ho liftnout "liftIO $ putStrLn sn".
jh
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.