Como mudar tipagem em haskell

1 resposta
programação
A

Quero que a função sorteie um número e, se este for maior que 7, mande uma mensagem de aprovação e chame essa função adicionar. Entretanto, minha função só cai no ‘else’. Aparecendo a mensagem “reprovado”. Acredito que seja a tipagem de IO Float com Float. Como resolver?

sortear :: Float -> Int
sortear x = ceiling(10 * x)


numeroSorteado :: IO ()
numeroSorteado = do    
    num <- randomIO :: IO Float
    print $ sortear num
    if(num >= 7) then
        do
            putStrLn ("Aprovado!" ++ "\n") >> adicionar
        else
        do
            putStrLn "Reprovado!"

adicionar = do
    putStrLn "Nome:"
    nome <- getLine
    putStrLn "Sobrenome:"
    sobrenome <- getLine
    putStrLn "CPF:"
    cpf <- getLine
    putStrLn "Idade:"
    idade <- getLine
    putStrLn "Salario:"
    salario <- getLine
    putStrLn "Cargo (Estagiario, Analista, Gerente, Diretor, VicePresidente ou Presidente) :"
    cargo <- getLine
    let new =  (nome ++ " "++ sobrenome ++ " " ++ cpf ++ " " ++ idade ++ " " ++ salario ++ " " ++ cargo ++ "\n")
    appendFile "funcionarios.txt" new
    putStrLn "Funcionario Salvo!"

1 Resposta

A

O que você quer dizer com problema na tipagem?

Acho que o problema é que num tem o resultado de randomIO. Geralmente funções de números aleatórios tem resultados entre 0 e 1.
Quais são os resultados possíveis para randomIO nesse formato?

Criado 9 de dezembro de 2017
Ultima resposta 9 de dez. de 2017
Respostas 1
Participantes 2