🧙 It's dangerous to go alone! Take this. 🧪

Run Settings
LanguageHaskell
Language Version
Run Command
-- 05/09/2024 Matheus Fernandes e Emilio Francesquini -- Universidade Federal do ABC -- Enunciado completo em: -- https://haskell.pesquisa.ufabc.edu.br/12-programação-funcional-2024-files/lista05.pdf module Exercicios where import Control.Monad.State import Data.Maybe (isJust) data Produto = Produto { nome :: String , preco :: Int } deriving (Show, Eq) data Loja = Loja { caixa :: Int , estoque :: [Produto] } deriving (Show, Eq) vender :: String -> Int -> State Loja Int vender nomeProduto valor = state realizaVenda where realizaVenda :: Loja -> (Int, Loja) realizaVenda lj | valor <= caixa lj = ( valor , Loja (caixa lj - valor) ((Produto nomeProduto valor) : estoque lj)) | otherwise = (0, lj) comprar :: String -> State Loja (Maybe Produto) comprar nomeProduto = state realizaCompra where realizaCompra :: Loja -> (Maybe Produto, Loja) realizaCompra lj = case findAndRemoveProduto $ estoque lj of Nothing -> (Nothing, lj) Just (p, novoEstoque) -> (Just p, Loja novoCaixa novoEstoque) where novoCaixa = caixa lj + preco p findAndRemoveProduto :: [Produto] -> Maybe (Produto, [Produto]) findAndRemoveProduto ps = go ps [] where go [] _ = Nothing go (x:xs) acc | nome x == nomeProduto = Just (x, reverse acc ++ xs) | otherwise = go xs (x : acc) type Cliente = State Loja Bool vendeEspada :: Cliente vendeEspada = do valorVendido <- vender "Espada" 10 return $ valorVendido > 0 compraEscudo :: Cliente compraEscudo = do maybeProduto <- comprar "Escudo" return $ isJust maybeProduto -- I'm Commander Shepard, and This Is My Favorite Store on the Citadel shepard :: Cliente shepard = do valorEspada <- vender "Espada" 10 valorEscudo <- vender "Escudo" 5 return $ valorEspada + valorEscudo > 0 -- TODO: frisk :: Cliente frisk = undefined loneWanderer :: Cliente loneWanderer = undefined dragonborn :: Cliente dragonborn = undefined geralt :: Cliente geralt = undefined main :: IO () main = do print "Welcome Traveler"
Editor Settings
Theme
Key bindings
Full width
Lines