How to input an integer in haskell? (input in console)

19,144

Solution 1

Use getLine or readLn and then parse the input value to the type you need it to be like so :

mayor :: Int -> Int -> Double
mayor x y =
    if  x < y 
    then 0.1
        else 0.3


compra :: Int -> Int -> Int -> Int -> Int -> Int -> Double
compra n v u iva p vp =
    let valor_compra = (fromIntegral v) * (fromIntegral n) * (1 - mayor n u)
        valor_iva = valor_compra * (fromIntegral iva) / 100
        valor_puntos = fromIntegral (p * vp)
        efectivo = if (valor_puntos < valor_compra) then valor_compra-valor_puntos else 0
    in  valor_iva + efectivo

main = do
       putStrLn "enter value for x: "
       input1 <- getLine
       putStrLn "enter value for y: " 
       input2 <- getLine 
       let x = (read input1 :: Int)
       let y = (read input2 :: Int)
       print (compra x y 7 14 10 1500)

Solution 2

If the integers are entered on same line, we can do something like below. The below program reads two numbers separated by space and prints their sum.

main :: IO()
main = do
    line <- getLine
    let a = (read (takeWhile (/= ' ') line) :: Int)
    let b = (read (drop 1 (dropWhile (/= ' ') line)) :: Int)
    putStrLn (show (a+b)) 
Share:
19,144

Related videos on Youtube

delta1020
Author by

delta1020

Updated on July 09, 2022

Comments

  • delta1020
    delta1020 almost 2 years

    How can I enter an integer in the console, store it in a variable and then pass it as a parameter of a function that I have created?

    So far so that it works I had to do as follows:

    In the last line you can see how I have been applying the function, what I want to do is to ask for the variables by console to be applied as integers to the function and then print the result.

        mayor :: Int -> Int -> Double
        mayor x y =
            if  x < y 
            then 0.1
                else 0.3
    
    
        compra :: Int -> Int -> Int -> Int -> Int -> Int -> Double
        compra n v u iva p vp =
            let valor_compra = (fromIntegral v) * (fromIntegral n) * (1 - mayor n u)
                valor_iva = valor_compra * (fromIntegral iva) / 100
                valor_puntos = fromIntegral (p * vp)
                efectivo = if (valor_puntos < valor_compra) then valor_compra-valor_puntos else 0
            in  valor_iva + efectivo
    
        main = do
        print (compra 20 2000 7 14 10 1500)
    

    The way I do it gives me as a result 16920.0

  • delta1020
    delta1020 about 7 years
    Thank you very much, it served me perfect