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

From HaskellWiki
Jump to navigation Jump to 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...")
 
m
Line 23: Line 23:
 
</haskell>
 
</haskell>
   
Actiunea putStrLn este similara lui putStr dar trece, la executie, pe randul urmator. putStr "ala" >> putStrLn "bala"va scrie pur si simplu "alabala" dar putStr''Ln'' "ala" >> putStrLn "bala" va scrie "bala" pe randul urmator.
+
Actiunea putStrLn este similara lui putStr dar trece, la executie, pe randul urmator. putStr "ala" >> putStrLn "bala"va scrie pur si simplu "alabala" dar putStr'Ln' "ala" >> putStrLn "bala" va scrie "bala" pe randul urmator.
   
 
<haskell>
 
<haskell>
Line 37: Line 37:
   
 
<haskell>
 
<haskell>
  +
Prelude> :t putStr
  +
putStr :: String -> IO ()
  +
  +
Prelude> :t putStrLn
  +
putStrLn :: String -> IO ()
  +
  +
Prelude> :t getLine
  +
getLine :: IO String
  +
  +
Prelude> :t readLn
 
readLn :: Read a => IO a
 
readLn :: Read a => IO a
Hugs> :t read
 
   
Hugs> :t putStr
+
Prelude> :t read
putStr :: String -> IO ()
+
read :: Read a => String -> a
   
  +
Hugs> :t <haskell>
+
</haskell>

Revision as of 10:06, 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 putStr'Ln' "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:

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

Prelude> :t putStrLn
putStrLn :: String -> IO ()

Prelude> :t getLine
getLine :: IO String

Prelude> :t readLn
readLn :: Read a => IO a

Prelude> :t read
read :: Read a => String -> a