Skip to content

Instantly share code, notes, and snippets.

@romulogarofalo
Created June 9, 2020 06:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save romulogarofalo/bd13aee086bf2b01aa8793d21d4132a1 to your computer and use it in GitHub Desktop.
Save romulogarofalo/bd13aee086bf2b01aa8793d21d4132a1 to your computer and use it in GitHub Desktop.
module Projeto3 where
data Cargo = Estagiario | Programador | Coordenador | Gerente deriving Show
data Pessoa = Pessoa {cargo :: Cargo, nome :: String} deriving Show
verSalario :: Pessoa -> Double
verSalario (Pessoa Estagiario _) = 1500
verSalario (Pessoa Programador _) = 5750.15
verSalario (Pessoa Coordenador _) = 8000
verSalario (Pessoa Gerente _) = 10807.20
verFolha :: Pessoa -> String
verFolha p = "{nome: \"" ++ (nome p) ++
"\", cargo: \"" ++ show (cargo p) ++
"\", salario: " ++ show (verSalario p) ++ "}"
promover :: Pessoa -> Pessoa
promover (Pessoa Estagiario n) = Pessoa Programador n
promover (Pessoa Programador n) = Pessoa Coordenador n
promover (Pessoa Coordenador n) = Pessoa Gerente n
promover (Pessoa _ n) = Pessoa Gerente n
-----------------------------------------------------------------------
contratarInicial :: String -> Pessoa
contratarInicial = Pessoa Estagiario
mediaSalarial :: [Pessoa] -> Double
mediaSalarial ps = (foldl calculo 0 ps) / (fromIntegral $ length ps)
where
calculo salario pessoa = salario + verSalario pessoa
contratarVariosEstag :: [String] -> [Pessoa]
contratarVariosEstag ps = map (contratarInicial Estagiario) ps
rotinaPromocao :: Pessoa -> String
rotinaPromocao p = p
|> promover
|> verFolha
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment