Difference between revisions of "Cum se scrie functia main ?"

From HaskellWiki
Jump to: navigation, search
(Created page with "Iata trei exemple ale functiei main. Aceasta este scrisa in do-notatie fara acolade si fara ;. Foloseste getLine ca functie pentru citit un String. getLine chiar are tipul: g...")
(No difference)

Revision as of 10:01, 29 November 2019

Iata trei exemple ale functiei main. Aceasta este scrisa in do-notatie fara acolade si fara ;. Foloseste getLine ca functie pentru citit un String. getLine chiar are tipul: getLine:: IO String. Adica este o actiune de IO care poate fi folosita pentru a lega o variabila la Stringul citit.

main1 = do  
    putStrLn "Cum te cheama ?"  
    nume <- getLine 
    putStrLn ("Buna ziua " ++ name)


Aceasta este o functie main care foloseste readLn pentru a citi numere si return pentru a face calcule. (Return nu este ceea ce stiati ci un fel de ambalator (e o functie de injectie in monada de IO) care incapsuleaza rezultatul unui calcul ibcat sa poata fi folosit in do-notatie. Ca tip transforma de exemplu un Int in IO Int, samd. Return este polimorfic, daca doriti ca el sa fie de tipul IO Int va fi asa, daca il doriti de tipul IO Integer va fi asa etc. Tipul lui putStr este String -> IO (). Are nevoie de un argument, stringul de tiparit si rezultatul e o operatie de IO care nu returneaza nimic, deci nu o folositi in do-notatie impreuna cu semnul <-.

main = do  {x <-  readLn ;
            y <-  readLn ;
            z <- return (x+y) ;
            putStr z ;
           }

Actiunea putStrLn este similara lui putStr dar trece, la executie, pe randul urmator. putStr "ala" >> putStrLn "bala"va scrie pur si simplu "alabala" dar putStrLn "ala" >> putStrLn "bala" va scrie "bala" pe randul urmator.

main = do putStrLn "Cat fac 3 + 5?"
           x <- readLn
           if x == 8
              then putStrLn "Corect !"
              else putStrLn "Gresit !"

Tipurile functiilor de IO folosite mai sus:

<haskell> readLn :: Read a => IO a Hugs> :t read

Hugs> :t putStr putStr :: String -> IO ()

Hugs> :t <haskell>